mybatis的cache的小坑

文章描述了一次生产环境中由于Mybatis缓存机制引发的问题,调用相同mapper方法在递归中返回0条数据。通过添加flushCache解决了临时问题,分析发现是对象被原始操作导致。提出解决方案是避免直接操作返回的对象,可能需要对历史代码进行重构以优化Mybatis的行为。
摘要由CSDN通过智能技术生成

我的在的项目,分为很多小组,今天有个同事说生产上出现了一个问题,导致了非常严重的后果。

      现象:

             大概是这样的 :调用一个mybatis的很简单的mapper,正常查询回来会返回3条数据,但是他这个程序有点特殊的逻辑(其实也是结构没写好),有一点递归,递归中相当于又调用了这个mapper的这个方法,并且方法参数都一样,这时候查出的结果0条数据,出问题后影响非常大,相当于付错钱了这种严重危险。

    

      不分析先解决问题:

              不用分析,先解决,我直接让加上flushCache,因为这对mybatis的源码还比较熟悉,这块应该是缓存方面的问题,试了一下果然就好了。先让他赶紧上线。

   

分析:

    接着来分析一下到底是什么原因让缓存出错了

       mybatis的一级缓存的事呃我就不画图了(因为没那空闲)

       原因是返回的List其实是原始的对象,可是写程序的人又操作了这个对象

    

 看一下CACEH的源码吧

  放Cache 

cacheKey的构建

  

 获取key

  

这样解了后只是解决了这个问题,单纯只解决这个问题就一句话,new ArrayList<>即可

,但是这是一个历史祖传代码,人工排查类似的问题太麻烦了,要找一个切入点改变mybatis的这种默认行为,有空再来继续写文章

          

    

    

     

Mybatis的小黑鸟插件是指MybatisX插件。该插件是用于在IntelliJ IDEA中进行Mybatis开发的工具。它提供了许多便捷的功能,例如自动补全、跳转到mapper接口、生成mapper映射文件等。通过安装MybatisX插件,你可以更方便地进行Mybatis开发。 在安装MybatisX插件后,你可能会遇到xml文件显示小鸟图标,但无法关联mapper文件的接口的问题。经过探索和尝试,发现这个问题并不是因为Mybatis无法识别xml文件或网址错误。解决这个问题的方法是将*.xml中的"https"改为"http",包括mybatis-config.xml和映射xml文件。在映射文件中,将网址修改为`<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">`,在mybatis-config.xml文件中,将网址修改为`<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">`。 此外,如果你想使用Mybatis的代码生成器(Mybatis Generator),你可以在IDEA中配置Maven插件。点击菜单栏的号,选择Maven,然后修改Name和Command line为`mybatis-generator:generate -e`,点击OK即可。同时,你还需要配置generator.properties文件,指定mysql的jar文件路径、数据库名、用户名和密码等信息。 希望这些信息能够帮助你解决问题并顺利使用Mybatis的小黑鸟插件。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [IDEA2022.2安装MybatisX插件,xml文件显示小鸟图标,但是无法关联mapper文件的接口?](https://blog.csdn.net/LIYUNHUI2018/article/details/127207823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用Generator(小黑鸟)反向生成Java项目(IDEA + Maven)](https://blog.csdn.net/weixin_30237719/article/details/99949625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值