news 2026/4/6 0:45:49

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/4/2 5:10:32

Vue3+Element Plus后台管理系统实战应用开发指南

Vue3Element Plus后台管理系统实战应用开发指南 【免费下载链接】vue-element-plus-admin A backend management system based on vue3, typescript, element-plus, and vite 项目地址: https://gitcode.com/gh_mirrors/vu/vue-element-plus-admin 你是否曾经在开发企业…

作者头像 李华
网站建设 2026/4/1 3:54:04

Android权限框架深度解析:XXPermissions架构设计与实战应用

Android权限框架深度解析&#xff1a;XXPermissions架构设计与实战应用 【免费下载链接】XXPermissions Android 权限请求框架&#xff0c;已适配 Android 14 项目地址: https://gitcode.com/GitHub_Trending/xx/XXPermissions XXPermissions作为一款专为Android平台设计…

作者头像 李华
网站建设 2026/4/5 13:20:22

自定义PEFT扩展开发完全指南

自定义PEFT扩展开发完全指南 【免费下载链接】peft &#x1f917; PEFT: State-of-the-art Parameter-Efficient Fine-Tuning. 项目地址: https://gitcode.com/gh_mirrors/pe/peft 参数高效微调&#xff08;PEFT&#xff09;技术已成为大模型优化的关键方法。通过自定义…

作者头像 李华
网站建设 2026/4/1 20:11:04

EmotiVoice语音幸福感建模技术初探

EmotiVoice语音幸福感建模技术初探 在虚拟偶像能开演唱会、AI客服会安慰人情绪的今天&#xff0c;我们对“声音”的期待早已超越了清晰发音和准确达意。人们开始追问&#xff1a;机器能否真正“动情”&#xff1f;一段语音是否可以不只是信息的载体&#xff0c;而是情感的共鸣…

作者头像 李华
网站建设 2026/4/5 6:03:23

Free Sidecar:让老旧设备也能实现多屏协作

Free Sidecar&#xff1a;让老旧设备也能实现多屏协作 【免费下载链接】free-sidecar Enable Sidecar on Unsupported iPads and Macs running iPadOS 13 and macOS Catalina 项目地址: https://gitcode.com/gh_mirrors/fr/free-sidecar 项目简介 Free Sidecar 是一个开…

作者头像 李华
网站建设 2026/3/31 12:04:48

【Docker入门】别再问“这玩意儿到底能干嘛”了!

有没有过这种崩溃时刻&#xff1f;本地写好的代码扔到服务器上就报错&#xff0c;对着屏幕喊“我这能跑啊”&#xff1b;或者换了台电脑重装环境&#xff0c;从上午折腾到下午&#xff0c;最后发现少装了个依赖包。要是有这种经历&#xff0c;那今天说的Docker&#xff0c;绝对…

作者头像 李华