如果是学习java的小伙伴相信是没有不知道mybatis的吧,这次我们就来详细了解一下mybatis的一些入门知识,快来看看吧。
一 、MyBatis简介
1. JDBC回顾
1.1 JDBC代码回顾及优缺点分析
1、直接使用JavaAPI,访问速度快,适合操作大批量数据
2、需要手动编码操作Statement、ResultSet、Connection等接口,容易出现大量重复代码
3、处理的结果,javax.sql.ResultSet仍然是面向数据库的表和列的数据类型,在Java程序中需要进一步的封送(在Dao中出现大量的getter和setter),才能变成JavaBean中可用的数据。
1.2 数据持久化技术与ORM
数据持久化,顾名思义就是将所有的数据持久保存下去,具体实现就是将内存中的数据模型转换为存储模型,及将存储模型转换为内存中的数据模型,它们的统称就是数据持久化,数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
由于内存中的数据在应用程序退出后也会不可获得,所以通俗意义上的持久化技术指的是将数据存储到磁盘上,尤其是数据库中的一种技术。
ORM及Object Relation Mapping,意为对象关系映射。在数据库中,所有的数据都是保存在表和列上,而在由高级语言编写的应用程序中,数据都是封装在JavaBean上,在现实关系中,数据库的表和JavaBean会存在一定的对应关系,ORM技术就是解决这种把面向关系的数据转移到面向对象模型上的技术。
目前较为流行的ORM框架:
> MyBatis:轻量级,简单易用
>
> Hibernate:ORM鼻祖,功能强大,能自动生成SQL,但是使用起来较为复杂
>
> JPA:与Hibernate为同一作者
2. MyBatis介绍
这是一款强悍的持久层框架,它支持定制化SQL、存储过程以及高级映射。它能够避免几乎所有的 JDBC 代码及手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
3. Helloword
3.1 工程搭建
1、创建maven Java项目,引入所需的开发库
mybatis ,oracle驱动
xml
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.3</version> </dependency> < dependency > <groupId>com.oracle</groupId> < artifactId > ojdbc6 < /artifactId> < version > 11.2 .0 .1 .0 < /version> < /dependency>
2、一些必要的mybatis准备工作:在eclipse中配置mybatis所需的dtd配置文件模板
3.2 项目流程分析
XML配置文件编写 -------> XML映射文件编写 -------> 编码
3.3 XML配置文件与XML映射文件编写
1、mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--一个配置文件中可以配置多个数据库连接环境,default用来指定默认使用的数据库环境--> <environments default="oracle"> <!--id用来唯一标识每个数据库环境--> <environment id="oracle"> <!--这个配置就是直接使用了JDBC的提交和回滚设置--> <transactionManager type="JDBC" /> <!--使用mybatis内置的简单数据库连接池对connection进行管理--> <dataSource type="POOLED"> <!--JDBC四要素--> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@//127.0.0.1:1521/orcl" /> <property name="username" value="scott" /> <property name="password" value="tiger" /> </dataSource> </environment> </environments> </configuration>
2、city.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace,命名空间,用来对多个映射文件中相同的SQL进行区分,功能类似于Java中的package概念--> <mapper namespace="CityMapper"> <!--返回类型--> <select id="findById" resultType="com.turing.bean.City"> select * from city where id=#{id} </select> </mapper>
编写完city.xml映射文件以后,需要在mybatis-config.xml配置文件尾部增加如下信息
</environments> < mappers > <!--注册映射文件,告诉mybatis到哪里去找这些sql语句--> <mapper resource="com/turing/mapper/city.xml"/> < /mappers> < /configuration>
3.4 代码实现
java
public static void main(String[] args) throws IOException { //依据配置文件制定的信息实例化会化工厂 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder() .build( in ); //开启会话 SqlSession session = factory.openSession(); //调用session提供的API,传入SQL的id和参数 City city = session.selectOne("CityMapper.findById", 4); System.out.println(city); //关闭会话 session.close(); }
3.5进一步改进代码
1、封装SessionFactoryUtils对代码进行复用
虽然MyBatis相对简化了JDBC的操作,但是在编写数据访问代码的时候,仍然有部分代码会出现重复,我们可以对SqlSessionFactory的处理做进一步的封装,进而达到代码重用的效果:
java
public class SessionFactoryUtils { private static SqlSessionFactory factory; //定义常量封装XML配置文件的路径 private final static String SOURCE = "mybatis-config.xml"; static { //在静态代码块中对SqlSessionFactory进行初始化 try { InputStream in = Resources.getResourceAsStream(SOURCE); factory = new SqlSessionFactoryBuilder() .build( in ); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession openSession() { return factory.openSession(); } public static void closeSession(SqlSession session) { if (session != null) { session.close(); } } }
测试代码将会变成如下:
java
public static void test2() throws IOException { SqlSession session = SessionFactoryUtils.openSession(); //使用“命名空间.sqlid”的方式调用具体的sql语句 City city = session.selectOne("CityMapper.findById", 4); System.out.println(city); SessionFactoryUtils.closeSession(session); }
2、使用别名机制简化类型的声明
在XML映射文件编写sql语句是,对于select节点的resultType属性,我们经常要声明一个JavaBean的返回类型(类名一般都会很长),一旦sql语句增多,编写起来也很麻烦,我们可以使用MyBatis提供的别名机制,对此进行简化,为此,我们需要在XML配置文件中新增如下配置:
<configuration> <typeAliases> <!-- 逐个声明单个类与别名的对应关系 --> <!-- <typeAlias type="com.turing.bean.City" alias="City"/> --> <!-- <typeAlias type="com.turing.bean.Aaa" alias="Aaa"/> --> <!-- <typeAlias type="com.turing.bean.Bbb" alias="Bbb"/> --> <!-- 批量声明某个包下所有类与别名的对应关系,别名即为简单类名 --> <package name="com.turing.bean" /> </typeAliases> <environments default="mysql">
声明别名后,select节点的编码形式如下:
<select id="findAll" resultType="City"> select * from city </select>
以上就是本篇文章的所有内容了,你知道mybatis是什么了吗?作为java基础教程之一,mybatis是一定要掌握的。还想了解更多相关java知识,请持续关注网站奇Q工具网了解详情。
推荐阅读: