不同事务的情况下,mybatis一级缓存如何处理。

简述:

今天项目遇到了点问题,简单描述为:不同事务A和B。B事务查询mybatis的数据后,A事务更新了该表的数据,B再查时,走缓存还是走sql?

在这里插入图片描述

测试案例:

1-不同事务下,为什么一级缓存没有清空

结果:不同事务下,缓存不一样,无法清空。如截图:当执行到更新语句时(同一个表的update),本地缓存并不存在(但我一开始已经执行过一次查询了)。所以无法清空
mybatis的缓存处理在: org.apache.ibatis.executor.BaseExecutor
在这里插入图片描述

2-相同事务下,一级缓存是否会被清空

结果:
首先,将select和update放在同一个事务下:
在这里插入图片描述

select结果:
在这里插入图片描述

执行语句,执行到update时,清空缓存,如下截图:
在这里插入图片描述

再次执行select语句:
在这里插入图片描述
结果:—>结果更新了 证明同一事务,对同一张表操作才有效。

2-如果去掉事物,一级缓存是否会被清空------>会清空,和同一事务效果一样。

最终解决方法:

1-去掉mybatis一级缓存
2-刷新特定语句的缓存,flushCache=“true” ,如:

<select id="save" parameterType="XX" flushCache="true" useCache="false">
    ……
</select>

3-去掉事务控制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值