mybatis一级缓存问题导致第二次查询结果出现变化
来源:互联网 发布:js返回顶部 编辑:程序博客网 时间:2024/06/06 07:37
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解决方案:
在mybatis的mapper 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),默认关闭。
阅读全文
0 0
- mybatis一级缓存问题导致第二次查询结果出现变化
- mybatis一级缓存问题导致第二次查询结果出现变化
- MyBatis--查询缓存--一级缓存
- 【MyBatis框架】查询缓存-一级缓存原理
- 【MyBatis框架】查询缓存-一级缓存原理
- 【Mybatis框架】查询缓存(一级缓存)
- MyBatis--查询缓存--一级缓存依据
- MyBatis--查询缓存--增删改会清空一级缓存
- Mybatis的一级缓存导致的异常问题解决
- Mybatis - 查询缓存(一级缓存,二级缓存,与ehcache整合)
- mybatis学习笔记(14)-查询缓存之一级缓存
- mybatis学习笔记(13)-查询缓存之一级缓存
- 【MyBatis】查询缓存(一级缓存和二级缓存)
- mybatis进阶(7)--查询缓存之一级缓存
- Mybatis学习笔记(十五)【查询缓存之一级缓存】
- MyBatis一级缓存
- Mybatis一级缓存
- Mybatis一级缓存
- 第八课,线性表的链式存储结构
- [LeetCode 611] Valid Triangle Number
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.7输入输出流(4.7.1-4.7.3)
- 51 nod 1188 最大公约数之和 V2(狄利克雷卷积+线性筛法)
- java学习 jstl中if标签的使用
- mybatis一级缓存问题导致第二次查询结果出现变化
- 如何根据某个实体属性字段的不同值来设置另一个实体属性字段的值
- js:制作一个简易的计数器:根据输入的两个整数和运算符,进行计算,然后输出计算结果
- 深入理解Javascript的继承和原型链
- 【脚本语言系列】关于PythonWeb服务器Nginx+uWSGI,你需要知道的事
- React Native 自定义控件之验证码和Toast
- 合并果子(优先队列)
- 手游服务端框架之网关
- Java EE的Struts 2使用笔记