MyBatis一级缓存失效的几种情况

MyBatis一级缓存失效的几种情况

1 MyBatis一级缓存概述
  • MyBatis 的一级缓存是 SqlSession 级别的,通过同一个 SqlSession 对象查询的数据会被缓存,下次再查询相同的数据时,就会从缓存中直接获取,不会从数据库重新访问;
  • 一般我们说到 MyBatis 的一级缓存时,都是针对查询操作而言的;
  • MyBatis 的一级缓存是默认开启的。
2 四种失效的基本情况
  1. 不同的 SqlSession 对象对应不同的一级缓存,即使查询相同的数据,也要重新访问数据库;
  2. 同一个 SqlSession 对象,但是查询的条件不同
  3. 同一个 SqlSession 对象两次查询期间执行了任何的“增删改”操作,无论这些“增删改”操作是否影响到了缓存的数据;
  4. 同一个 SqlSession 对象两次查询期间手动清空了缓存(调用了 SqlSession 对象的 clearCache() 方法)。
3 几种特殊情况
  1. 如果在同一个 SqlSession 对象两次查询同一数据期间,我们使用另一个 SqlSession 对象修改了这个数据,那么这两次查询返回的结果依旧是相同的(说明 SqlSession 对象还是从一级缓存中获取了数据),即使数据已经发生了变化;
  2. 同理第一种情况,如果在同一个 SqlSession 对象两次查询同一数据期间,我们使用 Navicat、Mysql Workbench 等数据库管理工具修改了这一数据,那么这两次查询返回的结果依旧是相同的,即使数据已经发生了变化;
  3. 如果在同一个 SqlSession 对象两次查询同一数据期间,我们使用该对象“增删改”了与该数据无关的其它数据,并没有进行任何涉及该数据的操作,数据也没有发生变化,那么 MyBatis 的一级缓存依旧会失效,这延伸自 2 中的第 3 种情况;
  4. 如果在同一个 SqlSession 对象两次查询同一数据期间,我们又多次查询了其它数据(期间没有进行任何的“增删改”操作),那么数据库中的该数据没有发生变化,MyBatis 也会顺利从一级缓存中获取到该数据。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值