一、前言
像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。
Mybatis 中缓存分为一级缓存,二级缓存。
友情提示:以下案例的背景和SSM-Mybatis【入门二】一样,此处为了节省篇幅,故省略。
二、Mybatis一级缓存
一级缓存是SqlSession级别的缓存,只要SqlSession没有flush或close,它就存在。
(一)验证一级缓存的存在
1、创建IUserDao接口
1 | public interface IUserDao { |
2、编写映射配置文件
1 |
|
3、编写测试类
1 | public class MybatisTest { |
4、测试结果如图
通过结果我们就会发现,只进行了一次数据库的访问,并且两次查询的结果是一样的。因此,可以判断第二次获取的数据是从SqlSession的缓存中提取的,即:以及缓存是存在的。
(二)一级缓存的清除
使用下列方法清除一级缓存:
1 | sqlSession.clearCache(); |
另外,如果sqlSession去执行commit操作(执行插入、更新、删除)的话,会自动清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的数据,避免脏读。
三、Mybatis二级缓存
二级缓存是mapper映射级别的缓存,也称之为SqlSessionFactory的缓存。
二级缓存是跨SqlSession 的,多个SqlSession可以共用二级缓存
(一)二级缓存结构与分析
sqlSession1 去查询用户信息,查询到用户信息会将查询数据存储到二级缓存中。
如果SqlSession3 去执行相同mapper映射下sql,执行commit提交,将会清空该 mapper映射下的二级缓存区域的数据。
sqlSession2 去查询与sqlSession1 相同的用户信息,首先会去缓存中找是否存在数据,存在则直接从缓存中取出数据。
(二)二级缓存的使用
二级缓存的使用和一级缓存不一样,一级缓存是不需要自己打开与关闭的,它不管怎样都是存在的;而如果我们需要使用二级缓存的话就需要我们自己进行配置,从而才能使用。
由于XML文件方式和注解方式的配置是不一样的,故分开进行总结。
(三)XML文件方式
步骤:
1、在SqlMapConfig.xml文件中开启二级缓存
2、配置相关的Mapper配置文件
3、配置Statement上的userCache属性
经过了这三步的配置之后,二级缓存就可以使用了。
注:当我们在使用二级缓存时,所缓存的类一定要实现 java.io.Serializable 接口,这样就可以使用序列化方式来保存对象。
(四)注解方式
1、在SqlMapConfig.xml文件中开启二级缓存
和XML文件方式一样,故省略
2、给Dao接口添加注解
经过了这二步的配置之后,二级缓存就可以使用了
Java新手,若有错误,欢迎指正!