加快查找
一、一级缓存(sqlSession)
失去缓存的情况
1、查询不同的语句
2、增删改操作,可能会改变原来的数据,所以缓存必定刷新
3、查询不同的Mapper.xml
4、手动清理缓存
sqlSession.clearCache();
注意:一级缓存默认开启,而且去不掉,在sqlSession中
二、二级缓存
</mapper>
xml映射文件的namespace对应一个二级缓存
工作机制
a、一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中
b、如果当前会话关闭了,这个会话对应的一级缓存就没了;将缓存丢到二级缓存(开启二级缓存的情况)
c、新的会话查询信息,就可以从二级缓存中获取内容
d、不同的mapper查出的数据会放在自己的缓存map中
官网 https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache
1、开启全局缓存(二级缓存)
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
默认为True,不过仍要写
<setting name="cacheEnabled " value="true"/>
2、开启缓存
在xml映射文件中添加 <cache/>
查询语句useCache开启或关闭缓存
flushCache="true" 刷新缓存
<mapper namespace="com.wt.dao.BlogMapper"> <cache/> <select id="getBlog" resultType="blog" useCache="true"> select * from blog </select>
3、问题
使用二级缓存需要将实体类序列化
package com.wt.pojo; import lombok.Data; import java.io.Serializable; import java.util.Date; @Data public class Blog implements Serializable { private String id; private String title; private String author; private Date create_time; private int views; }
小结
二级缓存在同一个Mapper中
所有的数据先放到一级缓存
当前session commit 或 close 时 才会到二级缓存