开启二级缓存
第一步:
在全局配置文件中开启
<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">