news 2026/2/27 15:03:07

MyBatis条件拼接失效?一招解决!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis条件拼接失效?一招解决!

问题背景

在前后端联调过程中,前端传递的参数在后端断点调试时能够正确接收,但在 MyBatis 的mapper.xml文件中,条件拼接却失效。原本使用常见的<if>标签检查参数是否为空,但始终无法生效。

原因分析

常见的<if test="dto.acb21a!=null and dto.acb21a!=''">写法在某些情况下可能无法正确判断字符串是否为空或空白。尤其是在参数为字符串类型时,空字符串或空白字符的判断可能不够严谨,导致条件逻辑未按预期执行。

解决方案

改用org.apache.commons.lang3.StringUtils工具类的isNotBlank方法,可以更严格地判断字符串是否非空且非空白。以下是优化后的代码示例:

<if test="@org.apache.commons.lang3.StringUtils@isNotBlank(dto.acb21a)"> <choose> <when test='dto.acb21a == "2"'> AND (BCC21B BETWEEN 1700 AND 1999 OR BCC21A BETWEEN 1700 AND 1999) </when> <when test='dto.acb21a == "3"'> AND (BCC21B BETWEEN 2000 AND 2999 OR BCC21A BETWEEN 2000 AND 2999) </when> <when test='dto.acb21a == "4"'> AND (BCC21B BETWEEN 3000 AND 4499 OR BCC21A BETWEEN 3000 AND 4499) </when> <when test='dto.acb21a == "5"'> AND (BCC21B BETWEEN 4500 AND 5999 OR BCC21A BETWEEN 4500 AND 5999) </when> <when test='dto.acb21a == "6"'> AND (BCC21B BETWEEN 6000 AND 7999 OR BCC21A BETWEEN 6000 AND 7999) </when> <when test='dto.acb21a == "7"'> AND (BCC21B BETWEEN 8000 AND 9999 OR BCC21A BETWEEN 8000 AND 9999) </when> <when test='dto.acb21a == "8"'> AND (BCC21B BETWEEN 10000 AND 14999 OR BCC21A BETWEEN 10000 AND 14999) </when> <when test='dto.acb21a == "9"'> AND (BCC21B >= 15000 OR BCC21A >= 15000) </when> </choose> </if>

关键点说明

  1. 字符串判断优化
    StringUtils.isNotBlank方法会检查字符串是否为null、空字符串或仅包含空白字符,比手动判断更可靠。

  2. 动态 SQL 逻辑清晰
    使用<choose><when>标签实现多条件分支,逻辑清晰且易于维护。

  3. 依赖引入
    确保项目中已引入org.apache.commons.lang3依赖,例如 Maven 配置:

    <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency>

适用场景

此方案适用于以下情况:

  • 需要严格判断字符串参数是否有效。
  • 动态 SQL 中需根据参数值实现多分支条件逻辑。
  • 避免因参数为空或空白导致 SQL 拼接异常。

通过这种方法,可以显著提升 MyBatis 动态 SQL 的健壮性和可读性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/27 14:58:00

UIE-PyTorch信息抽取实战:从业务痛点到技术落地

UIE-PyTorch信息抽取实战&#xff1a;从业务痛点到技术落地 【免费下载链接】uie_pytorch PaddleNLP UIE模型的PyTorch版实现 项目地址: https://gitcode.com/gh_mirrors/ui/uie_pytorch 面对海量非结构化文本数据&#xff0c;传统的信息抽取方案往往面临标注成本高、模…

作者头像 李华
网站建设 2026/2/21 21:37:32

全球高频喷射呼吸机市场分析:年复合增长率为7.29%

高频喷射呼吸机是一种采用高频、低压、小潮气量脉冲式气流进行通气支持的呼吸治疗设备。其核心原理是通过电磁或气动阀高速开闭&#xff0c;将高压气源切割成频率通常为60-600次/分钟的高速喷射气流&#xff0c;经细孔导管送入患者气道。该技术利用气体对流、湍流扩散等效应完成…

作者头像 李华
网站建设 2026/2/23 22:46:16

全球智能功率模块市场调研报告

智能功率模块是一种先进的功率开关器件&#xff0c; IPM内部集成了逻辑、控制、检测和保护电路&#xff0c;由于IPM通态损耗和开关损耗都比较低&#xff0c;使散热器的尺寸减小&#xff0c;故整个系统的体积减小了很多&#xff0c;也大大增强了系统的可靠性&#xff0c;适应了当…

作者头像 李华
网站建设 2026/2/26 11:43:20

PM2 WebUI:终极开源Web管理界面,轻松掌控Node.js应用

PM2 WebUI&#xff1a;终极开源Web管理界面&#xff0c;轻松掌控Node.js应用 【免费下载链接】pm2-webui PM2 WebUI. Opensource Alternative to PM2 Plus. Minimalistic App Manager and Log Viewer 项目地址: https://gitcode.com/gh_mirrors/pm/pm2-webui 还在为复杂…

作者头像 李华
网站建设 2026/2/21 0:46:29

惊!1区TOP顶刊,受运营资源调整停止收稿!或因停刊被SCI剔除?

本期解刊《Environmental Health Perspectives》环境类中科院 1 区顶级期刊《Environmental Health Perspectives》自2025年4月23日起&#xff0c;在官网发布重磅公告&#xff1a;受运营资源调整影响&#xff0c;即日起暂停接收新投稿件。现阶段尚在投稿流程及处于审稿环节的稿…

作者头像 李华
网站建设 2026/2/20 18:33:44

PowerBI主题模板终极指南:30+预设模板轻松美化数据报表

PowerBI主题模板终极指南&#xff1a;30预设模板轻松美化数据报表 【免费下载链接】PowerBI-ThemeTemplates Snippets for assembling Power BI Themes 项目地址: https://gitcode.com/gh_mirrors/po/PowerBI-ThemeTemplates 想要快速提升Power BI报表的视觉吸引力吗&am…

作者头像 李华