文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis的mapper.xml中if标签test判断怎么使用

2023-07-01 00:31

关注

本文小编为大家详细介绍“Mybatis的mapper.xml中if标签test判断怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mybatis的mapper.xml中if标签test判断怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

mapper.xml中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="@com.xxx.util.MybatisTestUtil@isNotEmpty(obj)">

下面是我写的一个简陋的工具类,不是很全面,抛砖引玉,各位可以根据需要补充。

import java.util.Collection;import java.util.Map;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);    }}

3. 判断数组是否包含某个元素

<if test="list.contains(xxx)">    //...</if>

注意,元素类型是字符串的话,参考1中的写法,一般这样写

<!--包含--><if test="list.contains('示例元素'.toString())">    //...</if><!--不包含--><if test="!list.contains('示例元素'.toString())">    //...</if>

mapper.xml <if test>书写时候的一些坑

1. 分页

map中添加了两个int类型的数据,

map.put("startNum",(page.getPageNum()-1)*page.getNumPerPage());map.put("pageSize",page.getNumPerPage());

错误的SQL书写:

<if test="startNum != null  and startNum != '' ">       LIMIT #{startNum},#{pageSize}</if>

正确的SQL书写

<if test="startNum != null">       LIMIT #{startNum},#{pageSize}</if>

因为startNum里存的是int数据,所以不能与空字符串进行比较,强行比较时会报错。

2. 字符串形式的数据比较

map中添加的是一个字符串形式的“1”

map.put("uploadFlag",upload.getUploadFlag());

如果想在XML中比较,以下两种方式都可以:

2.1 test使用双引号

比较的对象使用单引号点toString()方法:

<if test="uploadFlag=='1'.toString()">     and pw.id in (select pw_id from t_contract_upload)</if>

2.2 test使用单引号

比较的对象直接使用双引号:

<if test='uploadFlag=="2" '>     and pw.id in (select pw_id from t_contract_upload)</if>

读到这里,这篇“Mybatis的mapper.xml中if标签test判断怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯