在mybatis的xml文件中如何使用test标签

Posted 大唐冠军侯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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);
    

以上是关于在mybatis的xml文件中如何使用test标签的主要内容,如果未能解决你的问题,请参考以下文章

使用Mybatis报错“Type interface com.test.mapper.UserMapper is not known to the MapperRegistry.“

Mybatis获取代理对象

mybatis,Spring等工具对xml文件正确性的验证

mybatis源码配置文件解析之五:解析mappers标签(解析XML映射文件)

mybatis中的一些标签使用

eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法