发现mybatisplus#Wrapper的一个小坑

什么坑?看如下demo代码:

public void getOne() {
        LambdaQueryWrapper wrappers = new LambdaQueryWrapper<>();
        wrappers.eq(SbhPlatOrder::getOrderId, 1L);
        sbhPlatOrderManager.getOne(wrappers);
    }

这里要说的是 eq 方法。该方法在mybatis-plus-core包里的Compare.java接口里,这个 eq 重载的方法签名如下:

// 在com.baomidou.mybatisplus.core.conditions.interfaces.Compare.java里
    default Children eq(R column, Object val) {
        return eq(true, column, val);
    }

注意到这个 eq 方法的第二个参数的类型是 Object。

上面demo代码中,SbhPlatOrder#orderId 是String类型, 对应数据库里的字段的类型是 varchar。 而demo里给的参数值是个Long型数字。

这种情况下, mybatisplus——严格说,应该是mybatis——生成的sql日志如下,也就是说,sql语句是: SELECT * FROM sbh_plat_order WHERE order_id = 1

16:40:44.287 DEBUG SbhPlatOrderMapper.selectOne:143 :==> Preparing: SELECT * FROM sbh_plat_order WHERE order_id = ?
16:40:44.336 DEBUG SbhPlatOrderMapper.selectOne:143 :==> Parameters: 1(Long)

but,但是,however,我们期望的SQL语句是: SELECT * FROM sbh_plat_order_20221026 WHERE order_id = ‘1 ‘

我的mybatisplus版本是 com.baomidou:mybatis-plus-boot-starter:jar:3.1.2, 希望高版本的mybatisplus可以解决这个类型转换问题。

发现mybatisplus#Wrapper的一个小坑

之所以提这个坑,是因为,今天下午,通过监控系统,发现我们系统生产能力突然下降,频繁报无法获取数据库连接。

最终排查出来的原因,竟然是因为mybatisplus的这个”坑”导致的。 数据表 levy_payment_flow 的字段flow_no前不久 由 bigint 改成了 varchar(32) 。而程序里依然存在 wrappers.eq(SbhPlatOrder::getFlowNo, Long.parseLong(requestNo)); 这样的代码。赶上今天系统交易量大,就曝出问题了。 levy_payment_flow 的字段flow_no 有唯一索引, 而 SELECT * FROM levy_payment_flow WHERE flow_no = 1642499617556336 因为类型不匹配,是不会命中这个唯一索引的,导致全表扫描, SELECT * FROM levy_payment_flow WHERE flow_no = ‘1642499617556336 ‘ 才会。结果呢,问题sql执行耗时长达30s,修正程序改为后者那个SQL后,就是毫秒级了。

Original: https://www.cnblogs.com/buguge/p/16830176.html
Author: buguge
Title: 发现mybatisplus#Wrapper的一个小坑

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685399/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • go语言接口

    接口在底层的实现有两个部分:type 和 data。 在源码中,显式地将 nil 赋值给接口时,接口的 type 和 data 都将为 nil。此时,接口与 nil 值判断是相等的…

    技术杂谈 2023年7月11日
    066
  • Swift开发iOS应用过程中的问题和解决记录

    虚拟机里安装OSX+XCode开发环境 用真机的请直接跳过这个部分。 主要是在VitrualBox里安装mac系统和xcode,参考这篇教程,VirtualBox的版本是4.3.1…

    技术杂谈 2023年5月31日
    0125
  • 数据仓库之汇总层(DWS)设计概要

    合理的数据仓库分层一方面能够降低耦合性,提高重用性,可读性可维护性,另一方面也能提高运算的效率,影响到数据需求迭代的速度,近而影响到产品决策的及时性。建立数据分层可以提炼公共层,避…

    技术杂谈 2023年5月31日
    0117
  • excel 单元格字符数限制

    Microsoft Excel 版本中,一个单元格可包含多达 32,767 个字符。但是,如果某单元格中包含的字符多于 1,024 个,则应遵循以下规则: 大约第 1,024 个字…

    技术杂谈 2023年5月30日
    0105
  • Python Json使用

    Python Json使用 本篇主要介绍一下 python 中 json的使用 如何把 dict转成json 、object 转成json 、以及json转成对象 等等。。 jso…

    技术杂谈 2023年7月11日
    081
  • 经典注意力机制

    2. 注意力机制的正式引入 前边我们通过机器翻译任务介绍了Attention机制的整体计算。但是还有点小尾巴没有展开,就是那个注意力打分函数的计算,现在我们将来讨论这个事情。但在讲…

    技术杂谈 2023年7月11日
    074
  • 多级缓存-OpenResty快速入门

    需求:实现商品详情页数据查询,在OpenResty中接收请求,并返回一段商品的假数据。 步骤一:修改nginx.conf文件1.在nginx.conf的http下面,添加对Open…

    技术杂谈 2023年5月31日
    0102
  • c7n 实现获取返回值后才取消button的 loading 状态

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/crazycode2/p/16441202.htmlAu…

    技术杂谈 2023年5月30日
    081
  • UOJTestRound#2社论

    模拟赛 C, D 出的 UTR 题,,, 开始复读官方题解 /oh/oh/oh 魔怔码风见谅 QwQ A. 题目排列顺序 给一个序列 ({f_n}),重排标准排列 (\pi),使得…

    技术杂谈 2023年7月24日
    065
  • 咏南go框架开发

    咏南go框架开发 以”计量单位”为例 1)使用”代码工厂”工具,将数据表生成units.proto。 2)使用protoc.exe …

    技术杂谈 2023年5月31日
    090
  • 解决Visual Studio Code无法响应的问题

    最近发现我的Visual Studio Code总是莫名其妙的无响应,具体症状是:打开VS Code一段时间后,通过右键菜单打开Visual Studio Code新文件的时候,无…

    技术杂谈 2023年5月31日
    0104
  • OneNote无法打开链接出现错误:你的组织策略阻止我们为你完成此操作

    首先打开注册表编辑器,按键盘win+r,调出运行窗口,输入regedit打开注册表编辑器 打开HKEY_CURRENT_USER\Software 打开\Classes 最后选中….

    技术杂谈 2023年5月30日
    093
  • Mac下php服务部署

    配置PHP环境 一、[endif]确认apache环境和php环境: 1.检查apache版本: sudo apachectl -version 2.检查php版本: sudo p…

    技术杂谈 2023年5月31日
    094
  • 线性回归:波士顿房价(利用现成函数)

    Original: https://www.cnblogs.com/canxi-yue/p/16096168.htmlAuthor: 月月今天做题了吗Title: 线性回归:波士顿…

    技术杂谈 2023年7月11日
    063
  • java多线程回顾2:生命周期与控制

    1、 线程生命周期概述 线程的生命周期如下图: 2、 新建与就绪 当程序使用new关键字创建一个线程之后,线程就处于新建状态了。此时线程只是被分配了内存资源,初始化了成员变量。 当…

    技术杂谈 2023年7月11日
    081
  • 使用python操作HDF5文件

    HDF Hierarchical Data Format,又称HDF5 安装: pip install h5py 对于数据集需要:先创建h5文件,再去读h5文件将dataset放在…

    技术杂谈 2023年7月25日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球