Mybatis第4天(缓存)
一,Mybatis缓存
查询两次,只执行了一次查询语句

缓存
数据的缓冲区
一级缓存
作用域:存储在单个的SqlSession里面
默认开启
二级缓存
实际上是一个全集缓存
作用域:存储在对应的XXXMapper里面(每一个Mapper的工作空间)
需要手动开启,开启之后,数据还是会优先缓存到一级缓存,当一级缓存失效后,会自动进入到二级缓存中
开启缓存步骤:
- 先在mybatis-config.xml中配置
<settings>
<!-- 配置Log4j日志 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 配置映射级别 -->
<setting name="autoMappingBehavior" value="NONE"/>
<!-- 设值缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
- 在XXXMapper.xml中配置
<!-- 在当前的mapper中使用二级缓存 可用的清除策略有:
LRU – 最近最少使用:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
flushInterval:刷新时间
size:缓存的数量
readOnly:只读
-->
<cache eviction="FIFO" flushInterval="60000" size="512"
readOnly="true" />
配置二级缓存后,即使关闭了会话,也还是会缓存到二级缓存中

缓存失效的情况
-
进行了增删改之后(由于进行了增删改,有可能会改变原来缓存的数据,所以会让缓存失效.注意:一二级缓存都会清除)
![image]()
-
执行了不同的XXXMapper.xml
-
手动清除(只清除一级缓存)
//手动清除缓存
ss.clearCache();
- 不同的SqlSession查询不同的东西


浙公网安备 33010602011771号