mybatis一级缓存问题导致第二次查询结果出现变化

mybatis一级缓存问题导致第二次查询结果出现变化,一个事务中相同查询方法,不同结果


1.问题回顾:

同样的查询方法,第一次查询的结果正常,第二次查询的结果出现变化

框架springmvc+mybatis

 

2 原因分析验证:

在同一个事物中获取数据出现误差,初步怀疑是mybatis一级缓存的问题的,二级缓存未启动,如果是一级缓存,第二次查询是在内存中获取的,所以需要查询内存地址是否一致

执行方法:

freighttemplet=freighttempletMapper.selectByPrimaryKey(freighttempletVo.getId());

 

2.1第一次查询

内存地址id:1372


对象中addCount值为1.0

 

2.2第二次查询

 内存地址id: 1372

对象中addCount值变化为0

 

2.3结论

在第一次查询执行完后有对获取的对象进行修改,导致第二次获取时是修改后的数据,出现问题

修改对象代码如下:

 

3解决方案:

mybatismapper xml里配置每次清空缓存flushCache

 

4.修改后再次测试
4.1第一次查询

4.2第二次查询

 

查看结果两次获取的数据是一致,成功!

 

 

5总结

同一个事务中,如果有重复查询,注意刷新mybatis一级缓存

 

6附录(COPY)
6.1mybatis缓存介绍

一级缓存

即session缓存,作用域为 Session,当 Sessionflush 或 close 之后,该Session中的所有 Cache 就将清空,默认开启。

注意 集成spring(使用mybatis-spring)时:

每次查询spring会重新创建SqlSession,所以一级缓存是不生效的。

而当开启事务时,spring会使用同一个SqlSession做查询,所以这个情况下一级缓存是生效的

二级缓存

即全局缓存,其作用域为Mapper(Namespace),默认关闭。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值