MyBatis的缓存分为一级缓存(本地缓存)和二级缓存
1、一级缓存
MyBatis的一级缓存是默认会开启的并且不能控制,存在于SqlSession的生命周期中。在同一个SqlSession中查询时,MyBatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对象中,在执行同样的查询操作时会从缓存中拿数据。若执行了DML操作(insert、update、delete),则会清空缓存中的数据。
2、二级缓存
二级缓存是需要配置开启的。不同于一级缓存只存在与SqlSession的生命周期,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace。
2.1、配置二级缓存
在mybatis-config.xml中添加如下代码
<settings>
<setting name = "cacheEnable" value="true"/>
</settings>
2.2、Mapper中的配置
在Mapper.xml文件中增加<cache/>可开启使用二级缓存
默认的二级缓存会有如下效果:
1)映射语句文件中的所有的查询语句会被缓存
2)映射语句文件中的insert、update、delete语句操作会刷新缓存
3)缓存会使用LRU(Least Recently Used 最近最少使用)的算法来回收
4)缓存会存储集合或者对象的1024个引用
5)缓存会被视为read/write的,意味着对象检索不是共享的,可以安全的被调用者修改,而不干扰其他调用者或者线程所做的前在修改。
2.3、cache元素属性
<cache eviction ="FIFO" <!--回收策略-->
flushInterval = "60000"<!--刷新间隔,单位毫秒,可以设置任意整数,默认不设置-->
size= 128 <!--引用数目,默认值是1024-->
readOnly= "true"/><!--属性可被设置为true/false,默认是false-->
2.4、Mapper接口中的配置
使用注解方式,添加@CacheNamespace
如:
@CacheNamespace
publicinsterface RoleMapper{
}
网友评论