news 2026/5/1 11:21:31

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/5/1 10:38:56

buuctf中的not_the_same_3dsctf_2016

首先checksec检查保护机制&#xff1a;-32位程序-仅开启了栈不可执行保护然后使用IDA反汇编工具进行分析&#xff1a;main函数中有栈溢出漏洞可利用&#xff0c;左边有get_secret函数&#xff0c;同时看出v4到栈底的偏移为45&#xff0c;原本需要填充49字节的垃圾数据&#xff…

作者头像 李华
网站建设 2026/5/1 10:37:19

A-47双麦语音模块:90dB降噪+全场景适配,重新定义清晰语音

在智能对讲的车库里&#xff0c;在轰鸣的生产车间中&#xff0c;在移动录音的现场上——模糊的语音、刺耳的回音、恼人的噪音&#xff0c;始终是阻碍设备体验升级的“拦路虎”。A-47双麦阵列回音消除及降噪模块&#xff08;V2.0&#xff09;的出现&#xff0c;以专业DSP芯片为核…

作者头像 李华
网站建设 2026/5/1 9:30:13

初探HarmonyOS应用

4.1 ArkUI 方舟UI框架 巩固夯实弹性布局相关语法 父 display: flex justify-content: center align-items:center 父加display:flex 子flex1 基本结构 html ​ head ​ body ​ .... ​ .... 项目结构 h xxxx.vue <template><template> <script setup><…

作者头像 李华
网站建设 2026/5/1 9:30:45

Video Download Helper 高级版:突破120分钟限制的专业视频下载神器

Video Download Helper 高级版&#xff1a;突破120分钟限制的专业视频下载神器 【免费下载链接】VideoDownloadHelper高级版-无120分钟时间限制 本仓库提供了一个名为 VideoDownloadHelper去除120分钟时间限制-高级版.zip 的资源文件。该文件是 Video Download Helper 的高级版…

作者头像 李华
网站建设 2026/4/23 18:45:54

pot-desktop跨平台翻译终极指南:从新手到高手

还在为阅读外文资料时频繁切换翻译软件而烦恼吗&#xff1f;是否想要一款真正免费、简单易用的跨平台翻译工具&#xff1f;pot-desktop正是为你量身打造的解决方案&#xff01;&#x1f680; 【免费下载链接】pot-desktop &#x1f308;一个跨平台的划词翻译和OCR软件 | A cros…

作者头像 李华
网站建设 2026/5/1 8:37:36

浏览器插件URL管理神器:Redirector使用完全指南

&#x1f50d; 你的浏览器URL管理遇到这些问题了吗&#xff1f; 【免费下载链接】Redirector Browser extension (Firefox, Chrome, Opera, Edge) to redirect urls based on regex patterns, like a client side mod_rewrite. 项目地址: https://gitcode.com/gh_mirrors/re/…

作者头像 李华