MyBatis框架进阶(三)

这篇文章中(事务管理、延迟加载、缓存、连接池)的概念在我的另一个篇文章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>

猜你喜欢

转载自blog.csdn.net/the_programlife/article/details/80609391