首页 > 其他分享 >在mybatis的xml文件中如何使用test标签

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

时间:2023-03-29 09:01:31浏览次数:39  
标签:xml 判断 return else mybatis isEmpty 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);
    }
}

标签:xml,判断,return,else,mybatis,isEmpty,test
From: https://www.cnblogs.com/datangguanjunhou/p/17267490.html

相关文章

  • 狂神说MyBatis01:第一个程序
    1.简介1.1什么是MyBatisMyBatis是一款优秀的持久层框架MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程MyBatis可以使用简单的XML或注解......
  • Spring整合Mybatis遇到的问题(一)
    问题1问题原因:在数据源配置类中没有创建事务管理在数据源配置类中添加好事务管理器的Bean即可问题2其实出现这个问题实质就是mapper接口和mapper.xml文件没有映射起......
  • 001-Idea用法-在pom.xml文件中增加模板注释
    XML文件注释快捷键为:Ctrl+Shift+/  今天发现,在pom.xml文件中写注释,输入<!,没有任何提示,想写个完整的注释,还需要<!-- -->把这一串完整的写进去,然后中间空两格,再写中间......
  • idea注释模板 pom.xml 配置(经典)
    方法注释生成:Setting->Editor->LiveTemplates,自定义:TemplateGroup,再定义:MethodTemplate。**@ClassName$name$*@DescriptionTODO*@Param$params$*......
  • nowcoder contest/911/F
    https://ac.nowcoder.com/acm/contest/911/F  值域上维护右括号的个数,遇到左括号就查询前面有几个右括号#include<iostream>#include<algorithm>#include<queue......
  • AtCoder Beginner Contest 295
    A-ProbablyEnglish#include<bits/stdc++.h>usingnamespacestd;intread(){intx=0,f=1,ch=getchar();while((ch<'0'||ch>'9')&&ch......
  • webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in up
    发生缘由Maven项目打包出错了问题解决Maven工程正常的目录结构为:项目的根目录:   |--src#源码   |  |--main#主工程代码   |  |......
  • XML外部实体注入简单总结
    前置知识XML什么是XMLXML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。具体介绍如下......
  • pytest
    pytest 简介:pytest是python的第三方单元测试框架,比自带的unittest更简洁和高效,同时兼容unittest框架 pytest测试用例编写规则:1、测试文件以test_开头(以_test......
  • pytest在python中的使用
    pytest简介:pytest是python的第三方单元测试框架,比自带的unittest更简洁和高效,同时兼容unittest框架。 pytest测试用例编写规则:1、测试文件以test_开头(以_test结尾......