Mybatis缓存

Mybatis存在一级缓存和二级缓存

一级缓存:默认开启。

二级缓存:手动开启。二级缓存默认是不开启的,需要手动开启二级缓存,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的。

public class Blog implements Serializable {
    private String id;
    private String title;
    private String author;
    private Date createTime;
    private int views;
}

在myBatis-config 中添加开启二级缓存的条件

<!-- 通知 MyBatis 框架开启二级缓存 -->
<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>

还需要在 Mapper 对应的xml中添加 cache 标签,表示对哪个mapper 开启二级缓存

<!-- 表示DEPT表查询结果保存到二级缓存(共享缓存) -->
<cache/>

useCache可以对具体的sql进行开关缓存操作,关闭则不会提交到二级缓存 

    <!--可以对具体的sql进行开关缓存操作,关闭则不会提交到二级缓存-->
    <select id="queryBlog" resultType="blog" useCache="true">
        select * from mybatis.blog
    </select>

 

作用范围:

一级缓存(本地缓存)

作用于sqlSession,从创建到关闭。

二级缓存(全局缓存)

作用于Mapper,当会话对应的一级缓存关闭时,会将缓存数据提交到二级缓存。新的会话查找会先从二级缓存中查找,找不到再到一级缓存。可以多个sqlSession共享缓存。

缓存策略(刷新缓存)

<cache
  eviction="FIFO"
  flushInterval="60000"
  size="512"
  readOnly="true"/>
  • LRU – 最近最少使用:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
  • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。

注意:

  • 映射语句文件中的所有 select 语句的结果将会被缓存
  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存
  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存

自定义缓存

<cache type="com.domain.something.MyCustomCache"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值