mybatis 的二级缓存的配置

开启二级缓存

第一步:

在全局配置文件中开启

<setting name="cacheEnable"  value="true" />

cacheEnable 对在此配置下的所有cache进行全局性开/关设置 默认值为true

第二步

在Mapper映射文件中添加一行开启二级缓存

.flushInterval(刷新间隔):可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。
      默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新;
      .size(引用数目):可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。
      默认值是1024;
      .readOnly(只读):属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例。
      因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。

      这会慢一些,但是安全,因此默认是false。

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

第三步:

调用pojo类实现序列化是的接口

class **pojo implements Serializable{  
    }  

为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定在内存中通过close();

操作将sqlSession的数据写入内存,不然写不入内存;

执行关闭操作,将sqlSession的数据写到二级缓存区域   sqlSession1.close(); 

禁用二级缓存

对于变化频率较高的sql,需要禁用二级缓存:在statement中设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,默认情况是true,即该sql使用二级缓存。

例如:<select id="findOrderListResultMap" resultMap="ordersUserMap" useCache="false">

刷新缓存

1、如果sqlsession操作commit操作,对二级缓存进行刷新(全局清空)。

2、设置statement的flushCache是否刷新缓存,默认值是true。

例如:<select id="findOrderListResultMap" resultMap="ordersUserMap" flushCache="true">









猜你喜欢

转载自blog.csdn.net/baidu_35975930/article/details/80217940