一、Mybatis的二级缓存
1.一级缓存默认开启,缓存范围SqlSession会话,即每次在一个sqlSession会话当中查询同一个数据,返回对象是同一个,即内存地址相同。
2.二级缓存手动开启,属于范围Mapper's Namespace,相当于在一个mapper文件当中,查询相同的数据,返回的结果是同一个对象。
二、缓存的范围
缓存模型图
由模型图我们可以看出,一级缓存可以存在多个,而二级缓存可以存在多个。
三、二级缓存运行规则
1.二级开启后默认所有查询操作均使用缓存
2.写操作commit提交时对该namespace缓存强制清空
3.配置useCache=false可以不用缓存
4.配置flushCache=true代表强制清空缓存
四、使用二级缓存的步骤
1.在mybatis的xml文件中开启二级缓存,代码如下
<settings> <!--驼峰命名转换--> <setting name="mapUnderscoreToCamelCase" value="true"/> <!--开启二级缓存--> <setting name="cacheEnabled" value="true"/> </settings>
2.在mapper文件中配置缓存策略
<!-- cache标签用于配置缓存应用策略 eviction是缓存的清除策略,当缓存对象数量达到上限后,自动触发对应算法对缓存对象清除 1.LRU – 最近最少使用的:移除最长时间不被使用的对象。 2.FIFO – 先进先出:按对象进入缓存的顺序来移除它们。 3.SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。 4.WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。 flushInterval 代表间隔多长时间自动清空缓存,单位毫秒,600000毫秒 = 10分钟 size 缓存存储上限,用于保存对象或集合(1个集合算1个对象)的数量上限 readOnly 设置为true ,代表返回只读缓存,每次从缓存取出的是缓存对象本身.这种执行效率较高 设置为false , 代表每次取出的是缓存对象的"副本",每一次取出的对象都是不同的,这种安全性较高 --> <cache eviction="LRU" flushInterval="600000" size="512" readOnly="true"/> <!--flushCache="true"在sql执行后强制清空缓存,并且该SQL结果不缓存--> <select id="findAll" resultType="com.itlaoqi.mybatis.entity.Goods" flushCache="true"> select * from t_goods </select>