Mybatis框架-核心配置元素settings

在上一篇博客,没有太多介绍settings元素,但是后来发现有一个开启二级缓存很重要,所以在这里写一下。

1.元素

元素主要用于改变MyBatis运行时的行为,例如开启二级缓存,开启延迟加载等。

2.实例

2.1 一级缓存

将之前的利用Mybatis对数据库进行增删改查的项目复制一份,只留下查询方法

由于Mybatis自带一级缓存所以当我们要一次性查询两次的时候就可以利用commit()方法来清空一级缓存,方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
public void cacheOneTest(){
SqlSession sqlSession=MybatisUtils.getSession();
int id=1;
Customer customer=sqlSession.selectOne("com.dm.po.Customer.findCustomerByID",id);
System.out.println("查询id为"+id+"查询用户");
System.out.println(customer.toString());
//清空一级缓存
sqlSession.commit();
//第二次查询
customer=sqlSession.selectOne("com.dm.po.Customer.findCustomerByID",2);
System.out.println("查询id查询用户");
System.out.println(customer.toString());

sqlSession.close();

}
2.2 二级缓存

首先打开mybatis-config.xml,加上一段代码打开二级缓存,

1
2
3
4
<settings>
<!-- 开启二级缓存 cacheEnabled 默认为False-->
<setting name="cacheEnabled" value="true"/>
</settings>

然后打开CustomerMapper.xml 加上一个标签即可

image-20191004142439381

此时开始测试,首先在MybatisTest写下这样一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*二级缓存测试
* 缓存在SQLSessionFactory
* 需要手动开启
* 二级缓存查询的对象需要序列化接口
* */
@Test
public void cacheTwoTest(){
SqlSession sqlSession=MybatisUtils.getSession();
int id=2;
Customer customer=sqlSession.selectOne("com.dm.po.Customer.findCustomerByID",id);
System.out.println("查询id为"+id+"查询用户");
System.out.println(customer.toString());
//与下面的SQLSession不是同一个,所以可以关闭
sqlSession.close();

//第二次会话查询,二级缓存
sqlSession=MybatisUtils.getSession();
customer=sqlSession.selectOne("com.dm.po.Customer.findCustomerByID",1);
System.out.println("查询id为"+id+"查询用户");
System.out.println(customer.toString());
sqlSession.close();


}

如果就这样的运行,会报错

image-20191004143118851

因为我们没有实现序列化接口,此时我们打开Customer.java,来实现这个接口image-20191004143329622

加上接口后(记得保存)我们再来测试。

image-20191004143442258

此时成功查询到两组数据。由于日志文件有问题所以只能这样显示了

-------------本文结束感谢您的阅读-------------
0%