在mybatis的xml文件中如何使用test标签
1. 等于条件的两种写法
① 将双引号和单引号的位置互换
<!--test标签用来条件判断,为true则执行标签下的sql--> <if test=' testString != null and testString == "A" '> AND 表字段 = #{testString} </if>
② 加上.toString()
<if test=" testString != null and testString == 'A'.toString() "> AND 表字段 = #{testString} </if>
2. 非空条件的判断
长久以来,我们判断非空非null的判断条件都是如下所示:
<if test="xxx != null and xxx != '' ">
但是这样的判断只是针对String的,如果是别的类型,这个条件就不一定成立了,比如最经典的:当是数字0时,这个判断就会把0过滤掉,所以如果要判断数字,我们一般会再加上一个0的判断(这和mybatis的源码逻辑有关,有兴趣的可以去看看源码)
<if test="xxx != null and xxx != '' or xxx == 0">
但是如果传进来的是数组或者集合呢?我们要再写别的判断吗?能不能封装个方法呢?
答案是可以的。
if标签里面的test判断是可以使用工具类来做判断的,毕竟test后面跟的也是一个布尔值,其用法是:
<if test="@完整的包名类名@方法名(传参)"> <!--例如:--> <if test="@com.xxx.util.MybatisTestUtil@isNotEmpty(obj)">
下面是我写的一个简陋的工具类,不是很全面,抛砖引玉,各位可以根据需要补充。
import java.util.Collection; import java.util.Map; /** * @description: mybatis的<if test="">标签中使用的非空判断工具类 * 使用方式:<if test="@com.xxx.xxx.util.MybatisTestUtil@isNotEmpty(obj)"> * @author: Karl * @date: 2020/7/20 */ public class MybatisTestUtil { public static boolean isEmpty(Object o) { if (o == null) { return true; } if (o instanceof String) { return ((String) o).trim().length() == 0; } else if (o instanceof Collection) { return ((Collection) o).isEmpty(); } else if (o instanceof Map) { return ((Map) o).isEmpty(); } else if (o.getClass().isArray()) { return ((Object[]) o).length == 0; } else { return false; } } public static boolean isNotEmpty(Object o) { return !isEmpty(o); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本