Mybatis缓存篇

一、一级缓存(本地缓存):作用域为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>

 

上一篇:java – Hibernate缓存策略


下一篇:缓存注解@Cacheable、@CacheEvict、@CachePut使用及注解失效时间