缓存
MyBatis内置了一个强大的事务性查询缓存机制,它可以非常方便的配置和定制。
MyBatis有两种缓存,一级缓存和二级缓存。
一级缓存
一级缓存即本地缓存,作用域默认为sqlSession。当Session flush或close后,该Session中的所有Cache将被清空。本地缓存不能被关闭,但可以调用clearCahe()来清空本地缓存。同一次会话期间只要查询过的数据都会保存在当前SqlSession的Map中。
一级缓存失效的四种情况:
- 不同的SqlSession对应不同的一级缓存
- 同一个SqlSession但查询条件不一样
- 同一个SqlSession两次查询期间执行了任何一次增删改,增删改会刷新缓存
- 同一个SqlSession两次查询期间手动刷新了缓存
二级缓存
二级缓存,全局作用域缓存。二级缓存默认不开启,需要手动配置。二级缓存默认不开启。需要手动配置。二级缓存在SqlSession关闭或者提交之后才会生效。
在全局配置文件中开启二级缓存
<setting name="cacheEnabled" value="true"/>
需要使用二级缓存得映射文件处使用cache配置缓存
<cache eviction="FIFO" size="10000"/>
MyBatis提供二级缓存的接口以及实现,缓存实现要求POJO实现Serializable接口
缓存相关属性:
缓存有关设置:
- 全局setting得cacheEnabled:是否开启二级缓存
- select标签的useCache属性:是否使用二级缓存
- sql标签的flushCache属性
- sqlSession.clearCache清理一级缓存
参照缓存:若想在命名空间中共享相同的缓存配置和实例。可以使用cache-ref引用
<cache-ref namespace="com.gz.mybatis01.UserDao"/>