mybatis 一级缓存导致查询结果与预期结果不一致

智数星云客
• 阅读 1739

示例sql:

@Transactional  
public RebateContract getInfo(RebateContract contract) {  
   RebateContract rebContractInfo = rebateContractDao.getInfo(contract);  
   logger.info("agentId:" + rebContractInfo.getAgentId());  
   rebContractInfo.setAgentId(10000L);  
   // 不会再查询 而是从缓存中获取rebContractInfo的值  
 RebateContract rebContractInfo1 = rebateContractDao.getInfo(contract);  
   logger.info("agentId1:" + rebContractInfo1.getAgentId());  
   return rebContractInfo1;  
}

执行结果:
mybatis 一级缓存导致查询结果与预期结果不一致
注意:必须同一个事物中
同一个事务中查询一次后,直接修复查询后结果,再次相同sql查询,实际不会再查询,而是从缓存中获取上次的查询结果。
但上次查询结果已经被修改,所以后面查询获取到的值已与实际查询该获取的值不一样了。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
Java框架之Mybatis(二)
本文主要介绍Mybatis(一)之后剩下的内容:1mybatis中log4j的配置2dao层的开发(使用mapper代理的方式)3mybatis的配置详解4输入输出映射对应的类型(parameterType和resultType)5mybatis动态sql6mybatis中的一级缓存7mybat
Stella981 Stella981
3年前
Mybatis一二级缓存实现原理与使用指南
Mybatis与Hibernate一样,支持一二级缓存。一级缓存指的是Session级别的缓存,即在一个会话中多次执行同一条SQL语句并且参数相同,则后面的查询将不会发送到数据库,直接从Session缓存中获取。二级缓存,指的是SessionFactory级别的缓存,即不同的会话可以共享。缓存,通常涉及到缓存的写、读、过期(更新缓存
Stella981 Stella981
3年前
SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件
一、Mybatis框架1、mybatis简介MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO
Easter79 Easter79
3年前
SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件
一、Mybatis框架1、mybatis简介MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
3年前
BeetlSQL 3.2.8 发布,Java 数据库访问工具
本次发布增加了一个贴心功能,可以限制Mapper方法中的SQL长度,以避免过长SQL导致难以维护配置属性MAPPER\_SQL\_MAX\_LENGTH,限制Mapper中的SQL长度,默认不限制代码自动生成的ID使用@AssingID无论是JAP,还是SpringData,还是MyBatis,还是BeetSQL,都支持Mappe
Stella981 Stella981
3年前
Mybatis(四)—— Mybatis 缓存
一、Mybatis缓存MyBatis包含一个非常强大的查询缓存特性,使用缓存可以使应用更快地获取数据,避免频繁的数据库交互二、Mybatis缓存分类1.一级缓存:SqlSession的缓存一级缓存默认会启用,想要关闭一级缓存可以在select标签上配置flushCache“true”;
Stella981 Stella981
3年前
Node.js 中使用 ECDSA 签名遇到的坑
文/Fenying最近有个朋友问我关于Node.js下使用ECDSA的问题,主要是使用Node.js的Crypto模块无法校验网络传输过来的签名结果。在踩坑无数后,终于搞清楚了原因。坑0x00:签名输出格式在排除了证书、消息不一致的可能之后,我开始对比使用Node.js签名的结果与网络传输过来的签
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
智数星云客
智数星云客
Lv1
所有的快乐,都来源于生活的心动。
文章
3
粉丝
0
获赞
0