一、一级缓存(本地缓存):作用域为SqlSession级别的缓存,默认开启。与数据库一次会话期间查询到的数据将会
放入一级缓存。
不使用一级缓存情况:1、SqlSession不一致
2、查询条件不同
3、查询前有过增删改操作
4、手动清空了SqlSession的缓存:sqlSession.clearCache();
二、二级缓存(sql映射文件缓存):作用域为一个sql映射文件,默认不开启,当一个会话提交或关闭后一级缓存的数据
就会存入二级缓存。
开启二级缓存步骤
- 1、全局配置文件中增加配置:<setting name="cacheEnabled" value="true"/>
- 2、在sql映射文件中<mapper>下增加:<cache></cache>
- 3、在Bean对象(POJO)中实现序列化接口:implements Serializable
<cache>标签的一些属性
eviction:缓存的回收策略:
• LRU – 最近最少使用的:移除最长时间不被使用的对象。
• FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
• SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
• WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
• 默认的是 LRU。
flushInterval:缓存清空时间,单位为毫秒,默认不清空。
readOnly:是否只读:
true:只读;mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。
mybatis为了加快获取速度,直接就会将数据在缓存中的引用交给用户。不安全,速度快
false:非只读:mybatis觉得获取的数据可能会被修改。
mybatis会利用序列化&反序列的技术克隆一份新的数据给你。安全,速度慢
size:缓存存放多少元素;
type="":指定自定义缓存的全类名,该类需要实现Cache接口。
三、第三方缓存(ehcache)
需要导入包: ehcache-core-2.6.8.jar、mybatis-ehcache-1.0.3.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.2.jar
需要在conf下添加一个配置文件:ehcache.xml(具体内容不表)
需要在sql映射文件下添加
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>