当前位置: 首页 > news >正文

【MyBatis Exception】省略动态SQL中的‘‘,会造成Runtime Exception

省略''不会直接报语法错误,但会触发逻辑错误(这比语法错误更隐蔽、更难排查),具体表现分两种场景:

一、核心问题:空字符串会被当成有效条件

当你省略tigerName!='',只写tigerName!=null时:

xml

<!-- 省略后的错误写法 --> <when test="tigerName!=null"> tiger_name=#{tigerName} </when>

如果代码中传入tigerName=""(空字符串):

  • MyBatis 会判定tigerName!=nulltrue(因为空字符串不是null);
  • 最终拼接出的 SQL 会包含tiger_name=''
  • 执行 SQL 后,会查询tiger_name等于空字符串的记录 —— 而你的业务逻辑是 “只查询有具体名称的老虎”,这会导致:
    1. 查询场景:返回不符合预期的空结果(数据库中通常没有tiger_name为空字符串的记录),或错误返回所有空名称的记录;
    2. 更新 / 插入场景:可能把tiger_name错误更新为空字符串,破坏数据完整性。

二、举个具体例子(你的代码场景)

假设你传入:

java

运行

Tiger tiger = new Tiger(); tiger.setTigerName(""); // 空字符串,不是null
  • 省略''test="tigerName!=null"true→ SQL 拼接tiger_name=''→ 查询tiger_name为空的记录(大概率无结果);
  • 不省略''test="tigerName!=null and tigerName!=''"false→ 不拼接该条件 → 按其他条件查询(符合预期)。

三、补充:是否会报语法错误?

  • ❌ 不会报 XML 解析错误 / MyBatis 运行时错误;
  • ❌ 不会报 SQL 语法错误(tiger_name=''是合法的 SQL);
  • ✅ 只会报 “业务逻辑错误”(查询 / 更新结果不符合预期)。

总结

  1. 省略''不会触发程序报错,但会导致逻辑漏洞(空字符串被当成有效条件);
  2. tigerName!=null过滤nulltigerName!=''过滤空字符串,两者缺一不可;
  3. 这是 MyBatis 处理字符串参数的经典坑,新手常因省略''导致查询结果异常。
http://www.jsqmd.com/news/394639/

相关文章:

  • 信号完整性测试中的skew
  • 启动流程全解密:从MaskRom到Loader再到Linux内核的破晓之路
  • 【医疗影像检测】VFNet模型在医疗器械目标检测中的应用与优化 - 详解
  • 题解:洛谷 P2419 [USACO08JAN] Cow Contest S
  • 深山藏匠心,粉润传千年——多跃有机野生葛根粉,用初心做一碗真葛根 - 品牌企业推荐师(官方)
  • 用数据说话 AI论文平台 千笔ai写作 VS 云笔AI 更贴合专科生需求
  • 2026 年 1-2 月 GEO 服务商 TOP10 选型速查表 - 品牌企业推荐师(官方)
  • 导师又让重写?一键生成论文工具 千笔ai写作 VS speedai,专科生专属神器!
  • 靠谱的数控开料机生产基地 - 品牌企业推荐师(官方)
  • 庐州匠心奢改图鉴:合肥四大高端改衣机构解锁奢侈品焕新密码 - 品牌企业推荐师(官方)
  • 官网-宿迁市城乡居民基本养老保险丧葬补助金制度
  • 题解:洛谷 P1073 [NOIP 2009 提高组] 最优贸易
  • 题解:洛谷 P1037 [NOIP 2002 普及组] 产生数
  • 给游戏开发者的【海外 Steam 愿望单获取方法】
  • 2026污水池清洗企业排名,口碑佳选在这里!污水池清洗企业哪家好技术引领与行业解决方案解析 - 品牌推荐师
  • 掌握这些,2026选国内热门S系列减速机工厂不踩坑,硬齿面斜齿轮减速机/提升机减速机,S系列减速机实力厂家哪家强 - 品牌推荐师
  • C#异步和并发在IO密集场景的典型应用 async/await
  • 题解:洛谷 P3385 【模板】负环
  • 2026年大件物流哪家强?口碑厂家精选指南,大件运输/大件物流,大件物流服务商口碑排行 - 品牌推荐师
  • 看完马斯克的“编程末日”预言,我反而松了一口气
  • 题解:洛谷 P4779 【模板】单源最短路径(标准版)
  • 矩阵乘法与同维空间互相转换(以二维为例)
  • 世毫九理论体系·正式总目录
  • 题解:洛谷 P1600 [NOIP 2016 提高组] 天天爱跑步
  • 美团礼品卡回收实用指南解决闲置困扰 - 京顺回收
  • 题解:洛谷 P2052 [NOI2011] 道路修建
  • 题解:洛谷 P1351 [NOIP 2014 提高组] 联合权值
  • 题解:洛谷 P5836 [USACO19DEC] Milk Visits S
  • YOLO26涨点改进 | 全网独家创新、注意力改进篇 | SCI一区 2025 | YOLO26引入MSCA多尺度稀疏交叉聚合,GCBAM分组注意力,助力遥感目标检测、图像分类任务有效涨点
  • 题解:洛谷 P3128 [USACO15DEC] Max Flow P