Mybatis 一级缓存和二级缓存
默认一级缓存开启(SqlSession级别的缓存,就是一个map)
二级缓存需要手动开启和配置,是基于NameSpace级别的缓存
为了提高扩展性。mybaits定义了缓存接口Cache, 我们可以通过实现Cache接口来自定义二级缓存
默认一级缓存失效情况:
1、SqlSession不同
2、SqlSession相同
1)查询条件不同(当前一级缓存中没有这个数据)
2)两次查询之间执行了增删改查操作
3)手动清除了一次缓存session.clearCache()
二级缓存:全局缓存。基于Namespace级别的缓存,一个Namespace对应一个二级缓存;
工作机制:
1、一个会话,查询一条数据,这个数据会被放在当前会话的一级缓存中;
2、如果会话关闭;一级缓存中的数据会被保存到二级缓存中;新的会话查询信息,就参照二级缓存
3、sqlsession->XXXMapper==>XXX(实体类)
不同的namespace查询的数据就会放在自己对应的缓存中(map)
查出的数据会被放在一级缓存中,只有会话提交或者关闭时,才会转移到二级缓存中
如何开启:
1、
<settings>
<setting name="cacheEnabled" value="true">
<settings>
2、
<mapper namespace="" resultType="" >
<cache > </cache>
</mapper>
3、POJO实现序列化接口