MyBatis <if> 标签字符串相等判断的陷阱无需判空的简洁判断方式

news/2024/9/21 14:43:54 标签: mybatis, sql, java

<if> 标签判断相等条件时,有时判断会不起作用,一般来说都是细节错误。

比如入参没有判空,或者等式左右的比较对象不是同类型(入参String比较int或是入参String比较char)。

eg. enable状态为Y时,查询某条件,比如开启日志则查询时也带出LOG记录

toString()写法

入参调用toString(),每次toString()前都需要判空

<if test="enable != null and enable.toString() == 'Y'.toString()">
    and LOG IS NOT NULL
</if>

这里还有个隐藏bug,入参Y直接和'Y'比较是不相等的,下面的写法是无法匹配的

<if test="enable != null and enable.toString() == 'Y'">
    and LOG IS NOT NULL
</if>

因为MyBatis用OGNL表达式动态解析生成 SQL 语句,入参被解析成String'Y'被解析成charJava是强类型的,charString是不相等的

简单修复这个bug可以把'Y'替换成"Y",变成String后再和入参比较

<if test="enable != null and enable.toString() == "Y" ">
    and LOG IS NOT NULL
</if>
javalangStringvalueOf_34">@java.lang.String@valueOf()写法

入参用valueOf转换一下,然后equals比较

hint: @java.lang.String@valueOf('req.enable') 不用判空,null会变成字符串"null"

<if test="@java.lang.String@valueOf(req.enable).equals("Y")">
    and LOG IS NOT NULL
</if>

第二种写法省去了判空这一步,可以避免一些bug,不过就是看起来很繁琐。

参考链接

OGNL - Apache Commons OGNL - Object Graph Navigation Library

MyBatis 源码解析:OGNL 表达式解析与使用-CSDN博客


http://www.niftyadmin.cn/n/5668973.html

相关文章

推理阶段不同batch size对大模型推理结果的影响

大模型推理阶段&#xff0c;进行batch inference批处理推理解码&#xff0c;会像预期的那样速度很快推完吗&#xff1f;会不会有什么问题&#xff1f; batch inference推理的结果居然会和一条一条推理结果差的很远&#xff1f;&#xff01;&#xff01; Batch Decoding/Infere…

React——点击事件函数调用问题

问题 <MessageOutlined onClick{handleIconClick(test_task_id,test_run_id)} style{{ width: 36 ,color: #3875f6, filter: brightness(1.5)}} />直接在onClick属性中调用函数并传递参数的语法会有问题。 在JSX中如果想要在事件处理器&#xff08;如onClick&#xff…

什么是HTTP DDOS,如何防护

在当今高度互联的网络世界中&#xff0c;网络安全威胁日益严峻&#xff0c;其中HTTP DDoS&#xff08;Distributed Denial of Service&#xff0c;分布式拒绝服务&#xff09;攻击作为一种常见的网络攻击手段&#xff0c;给企业和个人用户带来了巨大的挑战。今天我们就来详细介…

netty编程之基于websocket发送二进制数据

写在前面 本文看下基于websocket发送二进制数据。 1&#xff1a;正文 直接看源码吧&#xff0c;主要如下几个类&#xff1a; WebSocketServerProtocolHandler (内置)&#xff1a;负责websocket握手消息处理 BinaryWebSocketFrameHandler(自定义)&#xff1a;负责处理二进制…

Centos 7 搭建Samba

笔记&#xff1a; 环境&#xff1a;VMware Centos 7&#xff08;网络请选择桥接模式&#xff0c;不要用NAT&#xff09; 遇到一个问题就是yum 安装404&#xff0c;解决办法在下面&#xff08;没有遇到可以无视这句话&#xff09; # 安装Samba软件 yum -y install samba# 创建…

VIVADO IP核之FIR插值器多相滤波仿真

VIVADO IP核之FIR插值器多相滤波仿真&#xff08;含有与MATLAB仿真数据的对比&#xff09; 目录 前言 一、滤波器系数生成 二、用MATLAB生成仿真数据 三、VIVADO FIR插值多相滤波器使用 四、VIVADO FIR插值多相滤波器仿真 五、VIVADO工程下载 总结 前言 网络上有许多文章…

IPsec-Vpn

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip address

ES5 在 Web 上的现状

最后一个支持 ES5 的浏览器 IE 11 在 2022 年被微软停止支持&#xff0c;那么今天 Web 上的 ES5 现状如何&#xff1f;在构建生产代码时&#xff0c;Web 开发者的最佳实践是什么&#xff1f; 本文将通过数据来回答这些问题&#xff0c;并基于这些数据为网站开发者和库作者提供一…