mybatis select语句缓存使用注意事项

工作中遇到一个select语句缓存问题(可提交读隔离级别下select语句没有读取到其它事物更新后的结果),场景如下:
数据库:mysql
User表结构:

隔离级别:read committed(可提交读)
Mapper文件:

 代码如下:


执行结果:

问题:虽然我们把mysql隔离级别设置为read committed,但是第二次查询的结果并没有看到其它事物提交的更新结果。

问题分析:查看日志发现第一次的查询sql打印出来了,但是第二次查询并没有打印sql;猜测可能是由于第二次查询直接使用上一次查询的缓存导致的问题。查看mybatis用户手册,看到select语句中有关于缓存的配置:flushCache配置(默认为false)、useCache(默认为true),也就是说select语句默认缓存是开启的,对于我们这个场景应该把这个缓存给禁掉。

问题解决:同一个session的select语句上设置flushCache="true"

mybatis手册中一下两个配置的解释:
flushCache
将其设置为true,无论语句什么时候被调用,都会导致缓存被清空。默认值:false。
useCache
将其设置为true,将会导致本条语句的结果被缓存。默认值:true。

测试发现,如果设置useCache="false"没有设置flushCache,select的结果还是被缓存了;把flushCache设置为true就没有使用缓存结果了。不知道这是不是mybatis的一个bug。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值