Mybatis缓存学习笔记

18 篇文章 0 订阅
2 篇文章 0 订阅

1,一级缓存

1.1)默认开启;

1.2)使用HashMap存储;

1.3)一级缓存只是相对于同一个SqlSession;

1.3.1)SqlSession,Executor,PerpetualCache三者的关系:

  • MyBatis在开启一个数据库会话时,会创建一个新的SqlSession对象,SqlSession对象中包含一个Executor对象,Executor对象中包含一个PerpetualCache对象;即:【SqlSession->Executor->PerpetualCache】
  • 当会话结束时,SqlSession对象及其内部的Executor对象还有PerpetualCache对象也一并释放掉。

1.4)核心要点:在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新或者没有执行更新操作,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。

1.5)SqlSession中调用close()和clearCache()的区别:

  • 调用close()方法会释放掉一级缓存PerpetualCache对象,对象不可用。
  • 调用clearCache()会清空PerpetualCache对象中的数据,对象可用。
    【没有执行更新操作】原因解释:
    SqlSession对象执行了任何一个更新操作【UPDATE、DELETE、INSERT】都将会清空PerpetualCache对象里面的数据,但该对象仍可以继续使用。

2,二级缓存

2.1)默认不开启;

2.1.1)如果要开启需要注意点:

  • MyBatis要求返回的JavaBean对象必须是序列化的,即要求实现Serializable接口;
  • 可在mapper接口对应的映射文件中配置标签的属性;

2.2)使用HashMap存储;

2.3)MyBatis的二级缓存是SqlSession或者Namespaces级别的缓存;

2.4)配置了二级缓存就表示:

  • 映射语句文件中的所有SELECT语句将会被缓存;
  • 映射语句文件中的所有INSERT、UPDATE和DELETE语句会刷新缓存;
  • 缓存会使用默认的Least Used(LRU,最近最少使用的)算法收回;

目前MyBatis提供以下策略:
1,LRU:最近最少使用的;一处最长时间不用的对象;
2,FIFO:先进先出;按对象进入缓存的顺序来移除他们;
3,SOFT:软引用;移除基于垃圾回收器状态和软引用规则的对象;
4,WEAK:弱引用;更积极的移除基于垃圾收集器状态和弱引用规则的对象;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值