这篇文章中(事务管理、延迟加载、缓存、连接池)的概念在我的另一个篇文章Hibernate框架进阶(三)中都有作介绍,这里就不再过多介绍
MyBatis事务管理
MyBatis管理事务是分为两种方式:
(1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交
(2)使用MANAGED的事务管理机制,这种机制mybatis自身不会去实现事务管理,而是让程序的容器(JBOSS,WebLogic)来实现对事务的管理
在前面两篇文章我们已经配置过事务管理,在mybatis-config.xml文件中
<transactionManager type="JDBC"/>
MyBatis延迟加载
MyBatis延迟加载只需在mybatis-config.xml文件中加上以下代码即可
<settings>
<!-- 打开延迟加载的开关 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 将积极加载改为消息加载即按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
MyBatis分页功能
为了便于观察,在category表新增100个数据
for (int i = 0; i < 100; i++) {
Category c = new Category();
c.setName("category name " + i);
session.insert("addCategory", c);
}
在Category.xml添加以下代码
<select id="limitListCategory" resultType="Category">
select * from category
<if test="start!=null and count!=null">
limit #{start},#{count}
</if>
</select>
在主类中编写运行逻辑
Map<String, Object> map = new HashMap<String, Object>();
map.put("start", 0);
map.put("count", 5);
List<Category> categories = session.selectList("limitListCategory", map);
for (Category category : categories) {
System.out.println(category);
}
利用PageHelper实现分页功能
PageHelper是一款犀利的Mybatis分页插件,使用了这个插件之后,分页开发起来更加简单容易。
添加PageHelper插件依赖
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
在mybatis-config.xml文件中
加上以下代码,开启PageHelper插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
在主类中编写运行逻辑
// pagehelper插件实现分页功能
PageHelper.offsetPage(0, 10);
List<Category> categories = session.selectList("listCategory");
for (Category category : categories) {
System.out.println(category);
}
// pagehelper插件实现获取总数
PageInfo<Category> pageInfo = new PageInfo<Category>(categories);
System.out.println("总数:" + pageInfo.getTotal());
System.out.println(pageInfo);
MyBatis二级缓存
在mybatis-config.xml文件中启动二级缓存
<setting name="cacheEnabled" value="true"/>
在需要开启二级缓存的类配置文件中添加缓存配置,这里使Category.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="pojo">
<cache/>
</mapper>
Mybatis使用c3p0连接池
添加c3p0依赖
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
新建类C3P0DataSourceFactory
MyBatis使用C3P0需要自己写个类继承UnpooledDataSourceFactory,然后指定dataSource。ComboPooledDataSource。
这个ComboPooledDataSource就是c3p0的数据源。
package pojo;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory{
public C3P0DataSourceFactory() {
// TODO Auto-generated constructor stub
this.dataSource = new ComboPooledDataSource();
}
}
修改mybatis-config.xml配置文件
<dataSource type="pojo.C3P0DataSourceFactory">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl"
value="jdbc:mysql://localhost/mybatis?characterEncoding=utf8&useSSL=true" />
<property name="user" value="root" />
<property name="password" value="admin" />
</dataSource>