执行同个namespace下的mapper映射文件中增删改sql,并执行了commit操作,会清空该二级缓存
注意:实现二级缓存的时候,Mybatis建议返回的POJO是可序列化的,也就是建议实现Serializable接口
缓存淘汰策略:会使用默认的LRU算法来收回(最近最少使用的)
如何开启某个二级缓存mapper.xml里面配置
<!--开启Mapper的namespace下的二级缓存--> <!-- eviction:代表的是缓存回收策略,常见下面两种 1)、LRU,最近最少使用的,移除最长时间不用的对象 2)、FIFO,先进先出,按对象进入缓存的顺序来移除他们 flushInterval:刷新间隔时间,单位为毫秒,这里配置的是10秒,如果不配置他,当SQL被执行的时候才会去刷新缓存 size:引入数目,代表缓存最多可以存储多少个对象,设置过大会导致内存溢出 readOnly:只读,缓存数据只能读取不能修改,默认值为false --> <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"></cache>
全局配置
<!--全局配置--> <settings> <!--这个配置使全局的映射器(二级缓存)启用或禁用缓存,全局总开关,这里关闭,mapper中开启了也没用--> <setting name="cacheEnabled" value="true"/> </settings>
优先查询二级缓存==》查询一级缓存==》数据库
在标签中添加 useCache="false"
<select id="queryUserOrder" resultMap="UserOrderResultMap" useCache="false"> select u.id, u.name, u.pwd, u.phone, u.head_img, v.id idv, v.out_trade_no, v.create_time, v.state, v.total_fee, v.video_id, v.video_title, v.video_img from user u left join video_order v on u.id = v.user_id </select>
原文:https://www.cnblogs.com/chenyanbin/p/13296267.html