Mybatis缓存机制:一级缓存与二级缓存

2020-03-17  本文已影响0人  小院看客

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{

}

上一篇下一篇

猜你喜欢

热点阅读