mybatis有一级缓存和二级缓存
一级缓存是sqlsession级别的缓存(事务级别)一级缓存失效的原因:
- sqlsession 不同
- sqlsession相同 但是在俩次查询之间有其他增删改的操作(在增删改的操作时候 mapper.xml sql 设置 flushcache 默认为true)
- sqlsession相同 查询条件不同
- sqlsession相同 主动清除缓存
关闭一级缓存 (SESSION是开启)
<setting name="localCacheScope" value="STATEMENT"/>
二级缓存是namespace的缓存,对应mapper.xml文件
开启二级步骤
- mybatis-config.xml设置
<setting name="cacheEnabled" value="true"/>
- mapper.xml文件中增加
<cache/>
- 对于entity 需要实现序列化接口
注意:
cacheEnable 为false 禁用的是二级缓存
每个select
标签都有 useCache = “false” 禁用 二级缓存
flushCache =true 会清除一级和二级缓存
一级缓存当sqlsession关闭的时候,才会将缓存刷到 二级缓存中