本文仅简单介绍MyBatis,以官方为准,不涉及spring框架相关
引入jar包
通过导入mybatis-x.x.x.jar
包来引入MyBatis,或者使用maven进行导入。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
核心类及其生命周期
在MyBatis中,有SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession,映射器实例类四个较为核心的类。
- SqlSessionFactoryBuilder Mybatis按照工厂模式进行核心对象的创建,那么也得先有一个工厂,这个类就是从xml配置文件或其他的文件流中获取配置信息,或者通过Resources类来从calsspath或其他地方来获取配置信息,来构造工厂类。该类在构造完工厂后就失去了作用。
- SqlSessionFactory MyBatis的核心类,是连接数据库和程序的桥梁,是一个数据库的连接池,应用可以从工厂中获取SqlSession使用,工厂的生命周期和程序的生命周期应一样长,且只有一个工厂对象,才能保证数据库资源不被无序占用。
- SqlSession 这是MyBatis的执行类,应用在执行数据库操作时,需向工厂类申请一个会话连接,在该会话中执行一系列数据库操作,然后结束会话。该类的普通对象是线程不安全且会占用连接资源的,该类应与应用中的一项操作的前后周期相对应,因此最好仅存在于一个方法中,随用随申请,并随一项操作的结束而关闭会话。可以使用try..catch..finally语句处理该类。
- SQLMapper映射器实例 这是绑定了SQL映射语句的接口,实际的数据操作对象。该对象从sqlSession对象中获得,因此其生命周期应小于SqlSession。
如果使用MyBatis-Spring等框架,将mybatis对象的生命周期交由注入框架进行托管,那一般不用管这些类的生命周期,后顾之忧交给框架即可。
基本参数配置
XML方法
仅使用MyBatis
参考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>
<environments default="development"><!--一个配置中,可以定义多个环境,例如针对开发/测试/生产的不同配置-->
<environment id="development"><!--具体的环境的配置-->
<transactionManager type="JDBC"/><!--事物管理引擎配置-->
<dataSource type="POOLED"><!--数据源配置,数据库池类型-->
<property name="driver" value="${driver}"/><!--数据库驱动-->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/><!--数据库接口定义XML-->
</mappers>
</configuration>
数据库接口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">
<mapper namespace="org.mybatis.example.BlogMapper"><!--数据库接口映射,以及命名空间声明-->
<select id="selectBlog" resultType="Blog"><!--数据库查询语句设置,设置ID还有返回类型-->
select * from Blog where id = #{id}<!--SQL语句,使用#{}进行参数填充,可以为具体的名称或者是变量输入顺序-->
</select>
</mapper>
XML解析及对象创建代码
String resource = "org/mybatis/example/mybatis-config.xml";#设置XML文件路径
InputStream inputStream = Resources.getResourceAsStream(resource);#通过Resources类解析XML类参数
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);#创建工厂类
使用Spring框架进行注入
典型的使用Spring框架对MyBatis进行管理的配置文件
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--datasource定义-->
<property name="driverClassName"> <!--驱动-->
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url"> <!--数据库地址-->
<value>jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8</value>
</property>
<property name="username"> <!--数据库用户信息-->
<value>root</value>
</property>
<property name="password">
<value>admin</value>
</property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--将会话工厂托管给Spring-->
<property name="typeAliasesPackage" value="com.how2java.pojo" />
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/how2java/mapper/*.xml"/><!--XML文件位置-->
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.how2java.mapper"/><!--自动扫描mapper-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--指定数据源所在的bean-->
</bean>
代码构建方法
如下列示例代码:
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();#获取数据源,例如数据库驱动、url和用户名密码之类
TransactionFactory transactionFactory = new JdbcTransactionFactory();#获取jdbc事物工厂对象
Environment environment = new Environment("development", transactionFactory, dataSource);#创建Mybatis命名空间
Configuration configuration = new Configuration(environment);#将命名空间加入配置类中
configuration.addMapper(BlogMapper.class);#在配置类中添加数据库映射
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);#使用配置文件构建工厂类
与数据库进行交互
不使用Spring等框架进行注入,手动操作
//定义 SqlSession
SqlSession sqlSession = null;
try {
// 打开 SqlSession 会话
sqlSession = SqlSessionFactory.openSession();
// some code...
sqlSession.commit(); // 提交事务
} catch (IOException e) {
sqlSession.rollback(); // 回滚事务
}finally{
// 在 finally 语句中确保资源被顺利关闭
if(sqlSession != null){
sqlSession.close();
}
}
使用Spring框架进行注入与对象管理
使用@Autowired
注解,对Mapper对象进行自动装配,然后即可调用Mapper的方法。
@Autowired
private SQLMapper SQLMapper;