MyBatis缓存
程序员文章站
2022-06-19 08:08:46
...
MyBatis缓存
一级缓存
MyBatis的一级缓存存在于SqlSession的生命周期中,在同一个SqlSession中查询时,MyBatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对象中.如果同一个SqlSession中执行的方法和参数完全一致,那么通过算法会生成相同的键值,当Map中缓存对象中已经存在该键值时,则会返回缓存中的对象.
设置 flushCache="true"会在查询数据的时候清空当前一级缓存 可以避免以上情况.但是由于清空一级缓存,会影响当前的SqlSession中所有的缓存.因此在反复查询获取只读数据时要避免这样使用.
二级缓存
MyBatis的二级缓存存在于SqlSessionFactory的生命周期中.
全局配置(默认为"true"可以不用配置)
mybatis-config.xml
<settings>
<!--其他配置-->
<setting name="cacheEnabled" value="true"/>
</settings>
在保证全局二级缓存开启的情况下,在命名空间中添加元素即开启二级缓存
如在UserMapper.xml中:
<mapper namespace="tk.mybatis.simple.mapper.UserMapper">
<cache/>
<!--其他配置-->
</mapper>
cache可以配置的属性:
- eviction(收回策略)
LRU(最近最少使用的):移除最长时间不被使用的对象,默认.
FIFO(先进先出):按对象进入缓存的顺序来移除他们
SOFT(软引用):移除基于垃圾回收器状态和软引用规则的对象
WEAK(弱引用):更积极的移除基于垃圾收集器状态和弱引用规则的对象
-
flushInterval(刷新间隔)
- 任意正整数,代表合理的毫秒时间段
-
size(引用数目)
- 可设置为任意正整数,默认1024
-
readOnly(只读)
- true/false
如果是使用注解的方式,则在接口方法上配置@CacheNamespace
上一篇: 如何将笔记本光驱换成外置光驱