黑马程序员技术交流社区
标题:
mybatis缓存
[打印本页]
作者:
335778654
时间:
2019-9-12 15:26
标题:
mybatis缓存
mybatis提供查询缓存,用于减轻数据库压力,提高性能。
一级缓存
一级缓存是sqlSession级别的,不同sqlSession之间的缓存数据区域相互不影响。在构造session对象时使用HashMap数据结构的内存区域存储缓存数据。
一级缓存默认是开启的。
sqlSession执行commit后会清空一级缓存,避免脏读。
二级缓存
二级缓存是mapper级别的,不同sqlSession可以共享同一个mapper中sql的缓存数据。
二级缓存默认不是开启的,需要通过setting配置开始
<setting name="cacheEnabled" value="true"/>
禁用二级缓存
通过上面的配置可以全局禁用二级缓存
在statement中设置 useCache=false 可以禁止当前sql语句的二级缓存,该配置默认是true。
二级缓存的局限性
二级缓存对细粒度的数据级别的缓存实现不好,因为是mapper级别的,同一个namespace下的数据缓存都会被刷新。
flushCache和useCache的使用
当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
useCache默认为true,表示会将本条语句的结果进行二级缓存。
当为insert、update、delete语句时:
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
useCache属性在该情况下没有。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2