如下代码:

PubPsndoc pubdoc = pubPsndocDAOService.selectByPrimaryKey(in.id);pubdoc.setPkCorp(newpkcorp);pubdoc.setPkDept(newpkdept);pubPsndocDAOService.update(pubdoc);
PubPsndoc personPubdoc = pubPsndocDAOService.selectByPrimaryKey(in.id);

在上述代码中会产生一个问题,就是在第二次sql查询时,查出来的得到的personPubdoc中的值是和修改后的pubdoc是相同的,和数据库中的数据不同。

之所以产生这个问题是因为mybatis的一级缓存将的查询结果放置在缓存之中,当对查询值进行更改时,相当于修改了缓存当中的值。在第二次查询时,是查询条件也是相同的同一条sql。mybaits便默认从缓存中将值取出,而并未去执行sql语句去数据库中查询。这就导致了personPubdoc中的pkcorp值为newpkcorp、pkdept的值为newpkdept。

要想规避这个问题我们有两种方法:

第一种:我们在sql的查询条件中增加一个时间戳的条件,时间戳精确到毫秒可以保证每一条sql的查询条件都不是相同的。这样mybatis便不会从缓存中直接取值。

第二种:我们可以不对第一次查询到的值做直接修改。

PubPsndoc pubdoc = pubPsndocDAOService.selectByPrimaryKey(in.id);try{CommonUtil.bean2bean(pubdoc, pubdocChange);
}catch(Exception e){....
}
PubPsndoc pubdocChange;
pubdocChange.setPkCorp(newpkcorp);pubdocChange.setPkDept(newpkdept);pubPsndocDAOService.update(pubdocChange);PubPsndoc personPubdoc = pubPsndocDAOService.selectByPrimaryKey(in.id);

我们一定要用CommonUtil.bean2bean()这个方法来进行反射获取属性值得到一个新的类,若是直接等于,类的地址未变还是会修改缓存中的值。

转载于:https://www.cnblogs.com/Concerning/p/10298565.html

mybatis一级缓存导致sql查询出现问题相关推荐

  1. 一文彻底读懂优秀开源产品MyBatis一级缓存设计!

    孙玄 奈学教育CEO 读完需要 3 分钟 速读仅需 1 分钟 孙玄, 现任奈学教育科技创始人&CEO ,毕业于浙大,前百度资深研发工程师.前 58 集团技术委员会主席/高级系统架构师到前转转公 ...

  2. java 一级缓存,MyBatis一级缓存避坑完全指南

    一级缓存概念 当我们使用Mybatis进行数据库的操作时候,会创建一个SqlSession来进行一次数据库的会话,会话结束则关闭SqlSession对象.那么一个SqlSession的生命周期即对应于 ...

  3. Mybatis一级缓存与二级缓存的区别你知道吗

    前言 Java面试经常问到Mybatis一级缓存和二级缓存,今天就给大家重点详解Mybatis一级缓存和二级缓存原理与区别. Mybatis缓存 缓存就是内存中的数据,常常来自对数据库查询结果的保存, ...

  4. SpringBoot关闭MyBatis一级缓存的方法

    原文网址:SpringBoot关闭MyBatis一级缓存的方法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringBoot关闭MyBatis一级缓存的方法. 备注 一级缓存只有在开启了 ...

  5. Mybatis一级缓存,二级缓存的实现就是这么简单

    介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...

  6. Mybatis一级缓存、二级缓存

    一级缓存:SqlSession mybatis一级缓存是指在内存中开辟一块区域,用来保存用户对数据库的操作信息(sql)和数据库返回的数据,如果下一次用户再执行相同的请求,那么直接从内存中读数数据而不 ...

  7. MyBatis】MyBatis一级缓存和二级缓存

    转载自  MyBatis]MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存.一级缓存的作用域默认是一个SqlSe ...

  8. 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28

    目录 0.一级缓存 1.在一个Session里查相同id的数据 2.在不同Session里查相同id的数据 3.二级缓存 4.基于前一个知识点 5.观察无二级缓存 6.启动二级缓存 7.在Catego ...

  9. mybatis一级缓存和二级缓存的区别?

    mybatis一级缓存和二级缓存? 一级缓存(本地缓存) 1.mybatis一级缓存是SqlSession级别的缓存, 2.在操作数据库的时候需要构造sqlsession对象,在对象中有一个数据结构( ...

最新文章

  1. nRF5_SDK_12.3.0 编译micro-ecc摘要
  2. 文件服务器的配置与管理(1) RAID技术
  3. Idea使用技巧总结(未完待续)
  4. initWithNibName与viewDidLoad的执行关系以及顺序
  5. webpack4 入门配置研究
  6. 战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?
  7. codeforces 69A-C语言解题报告
  8. 绿茶2003服务器系统 新浪,我在用WIN server2003
  9. win10 + bazel-0.20.0 + tensorflow-1.13.1 编译tensorflow GPU版本的C++库
  10. linux 坏块,如何在Linux中检查硬盘上的坏扇区或坏块
  11. Java教师评估系统_jsp教师在线评价系统
  12. 这是一个刚入行程序员的成长
  13. Java继承关系之富二代和他爹
  14. 大二Web课程设计——动漫海贼王(可以很好的应付老师的作业)
  15. 新生活、新成长、新认知
  16. 微信小程序实现简单的瀑布流式布局
  17. 二手书籍交易网站毕业设计,二手书籍买卖平台毕设,二手书籍交易市场平台设计与实现毕业设计论文分析
  18. 混合云网络怎么组网搭建?
  19. 邮件-域名-DNS相关知识
  20. DCMM数据管理能力成熟度标准介绍

热门文章

  1. java和python可以在一个项目中同时使用么-java调用python的几种用法(看这篇就够了)...
  2. python代码编辑器排行榜-写 Python 哪个编辑器 / IDE 最好用?
  3. python代码大全o-python文件编码及执行
  4. 武汉python培训班排行榜-比较靠谱的武汉Python培训机构是哪个?
  5. python学习音频-Python学习笔记--音频处理
  6. python画折线图详解-利用python画出折线图
  7. python学了有什么用处-Python主要用途是哪些,跟机器学习等有啥关系呢?
  8. python简介怎么写-python爬虫简历怎么写
  9. 用python怎么赚钱-用python赚钱(python新手怎么兼职)
  10. python代码大全表解释-.python3基础之“术语表(1)”