Mybatis的l中if标签test判断的⽤法
1. 字符串等于条件的两种写法
①将双引号和单引号的位置互换
<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="@util.MybatisTestUtil@isNotEmpty(obj)">
下⾯是我写的⼀个简陋的⼯具类,不是很全⾯,抛砖引⽟,各位可以根据需要补充。
import java.util.Collection;
import java.util.Map;
/**
* @description: mybatis的<if test="">标签中使⽤的⾮空判断⼯具类
*      使⽤⽅式:<if test="@util.MybatisTsetUtil@isNotEmpty(obj)"> * @author: singleDog
* @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 Class().isArray()){
return((Object[]) o).length ==0;
}else{
xml标签大全
return false;
}
}
public static boolean isNotEmpty(Object o){
return!isEmpty(o);
}
}
3. 判断数组是否包含某个元素
<if test="ains(xxx)">
//...
</if>
注意,元素类型是字符串的话,参考1中的写法,⼀般这样写
<!--包含-->
<if test="ains('⽰例元素'.toString())">
//...
</if>
<!--不包含-->
<if test="!ains('⽰例元素'.toString())">
//...
</if>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。