mybatis学习 --- 高频重点:缓存

前言

mybatis拥有自己的缓存,在缓存中他有三个重点:

  • 一级缓存(局部缓存)
  • 二级缓存(全局缓存)
  • 自定义缓存

官网内容

缓存策略:

  • 映射语句文件中的所有 select 语句的结果将会被缓存。
  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存
  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。
  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
  • 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
  • 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

提示:(注解开发时)缓存只作用于 cache 标签所在的映射文件中的语句。如果你混合使用 Java API 和 XML 映射文件,在共用接口中的语句将不会被默认缓存。你需要使用 @CacheNamespaceRef 注解指定缓存作用域。

一级缓存

  • 一级缓存是默认开启的
  • 它是sqlSession级别的,不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 一级缓存的作用域是同一个SqlSession,也就是这个SqlSession关闭的话,这个缓存也会关闭
  • 本地缓存不能被关闭,可以调用clearCache()来清空本地缓存,或者改变缓存的作用域

二级缓存

  • 二级缓存是mapper级别的
  • 二级缓存是跨SqlSession的
  • 二级缓存必须得SqlSession关闭之后才会在内容

环境

  • 二级缓存是需要手动设置的
    <settings>
        <!--开启全局缓存(二级),其实默认就是开启的-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
  • 在需要开启缓存的xml中添加< cache/>标签

cache中有一些属性可以设置:
在这里插入图片描述

过程

  • 一个SqlSession产生一个一级缓存
  • 当这个SqlSession被关闭时,这个一级缓存也会失效
  • 如果有开启二级缓存的话,一级缓存失效后,其中的内容换被保存在二级缓存中
  • 新的SqlSession会从二级缓存中提取数据
  • 每个mapper都拥有自己的二级缓存
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值