使用动态SQL中的if标签做条件判断的几种用法和注意点
使用中踩到的坑记录一下(大神请略过,我只是个菜菜,忽喷!!!万分感谢!!!)
<mapper namespace="dynamic"><resultMap id="userMap" type="com.soft.test.model.User"><id column="id" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="create_date" property="createDate"/></resultMap><!--***if 标签使用类似html的C标签的if 在此处应该是and 或者使用or来代替&&和||*** --><select id="selectUseIf" parameterType="com.soft.test.model.User" resultMap="userMap">select * from t_user where<if test="id != null and id != ''">id=#{id}</if><if test="username != null and username != ''">and username like concat('%',#{username},'%')</if><if test="password != null and password != ''">and password=#{password}</if></select></mapper>
在上方代码中可以看到要注意的点在于要使用and来代替" && "和用or来代替 " || "
mybatis的if判断语句其实跟el表达式的if条件判断有些类似。
例如:
1 如果参数为数字类型的时候没有特俗需求的情况只需要判断是否为null即可。
例如:
如果有特俗需求,例如判断是否大于某个数的时候才行。只需要加上对应的条件判断即可
例如:
mybatis对于这种大于小于等等还有另一种形式。
例如:
对应关系:
gt 对应 >gte 对应 >=lt 对应 <(会报错 相关联的 "test" 属性值不能包含 '<' 字符)lte 对应 <=(会报错 相关联的 "test" 属性值不能包含 '<' 字符)
2 如果为字符串类型
2.1 如果不需要过滤空串的情况 仅仅判断null即可
例如:
2.2 如果需要过滤空串,添加空串判断即可 不支持 && 所以这里用 and or || 来做逻辑与或的判断
例如: 或者
2.3 如果判断字符串是否已某个特俗字符开头,结尾等。直接调用String的对应方法即可
例如:
2.4 是否是某个特定字符串,某些业务有此需要。
例如: 或者
注意:
这种形式的写法在参数类型是字符串的时候是没有问题的,
但是参数类型为非字符串类型的时候就需要写成
仅仅写成也会有很大可能会挂。
也许你会说非字符串的为什么要写成这样。这就要看特俗需要了。
例如:某一个sql片段是公用的,
该片段更新条件也用,但是当你需要将某一个字段更新成null的时候怎么办。
这个时候就可以通过传入一个特定的字符串来弄。当传入的字符串为特定字符串的时候就更新该字符串为null。
xxx=null
当然这样子貌似date型会挂。
通过 2.2 也可以看出mybatis对于字符串的相等不相等的判断也是有对应的特俗操作符的。
eq 对应 ==
neq 对应 !=
当然还可以看出来if的条件判断test是支持对象自身方法调用的,即使是自己写的方法,可以自己尝试。当然下面会有例子。
例如:里面可以用‘xxxx’.equals(xxxx) 字符串的比较两个字符串方法
xxxx.indexOf('ss') 判断字符串里面是否包含某个字符等等
3 判断list是否为空
上面说过,if条件判断可以直接调用对象自身的方法进行逻辑判断,所以list判空。可以调用.size()>0或者.isEmpty()
例如: ,
4 map参数同同理 取值的话 map.key(map中的key名字)即可
此文摘要:特别鸣谢sumlen
使用动态SQL中的if标签做条件判断的几种用法和注意点相关推荐
- mybatis动态sql中的where标签的使用
From: https://blog.csdn.net/wobuaizhi/article/details/81874664 在使用mybatis的动态sql时,有时候遇到根据条件判断添加where后 ...
- mybatis动态sql中的trim标签的使用
trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...
- Mybatis动态sql中的foreach标签的使用
foreach 标签一般用于遍历集合,构建in条件语句或者批量操作语句 <insert id="batchSave" parameterType="java.uti ...
- 判断参数大于0_能做条件判断的文本函数
我们知道文本函数的一般作用就是查找.替换.提取文本等等,可是能做条件判断的文本函数你见过吗?不仅如此,它还可以让日期变数字.数字变大写.金额变万元等等.说到这里,屏幕前的小伙伴有猜到它是谁吗? 在Ex ...
- mybatis动态sql中where标签的使用
where标记的作用类似于动态sql中的set标记,他的作用主要是用来简化sql语句中where条件判断的书写的,如下所示: <select id="selectByParams&qu ...
- ORACLE 动态SQL中的多个单引号
今天在项目中遇到动态拼sql的语句, 语句如下: v_sql := 'update Table_Test t ' ||' set t.field1 = ''' || 变量1 || ''',' -- ...
- oracle 更新sysdate,如何使用sysdate更新日期列,包括动态sql中的时间戳
Lalit Kumar .. 9 我已经尝试使用to_date(to_char(sysate)),但缺少时间戳 这样做是没有意义的. 为什么PL/SQL执行这么简单的任务.在纯SQL中执行此操作.UP ...
- [网摘]动态SQL中set与select对变量赋值的影响
在动态SQL中,存在着多种对字符变量赋值的方法.其中set和select使用的朋友最多.对于像我一样的小鸟来说,可能只是会用这两个方法而已,并没有真正理解这两个方法的真正内涵.我个人的理解是这样的:s ...
- sql动态sql给变量复值_在动态SQL中使用变量
sql动态sql给变量复值 Before we delve into these SQL concepts, note that I like to do all my development in ...
最新文章
- 刘夏真的简历中国科学院计算机所,专家人才库数据----中国科学院计算技术研究所...
- bootstrap-nav属性详解
- 【转】使用Apache Kylin搭建企业级开源大数据分析平台
- 修改jwt过期时间_PostgreSQL如何修改用户过期时间
- ionic cordova 引用百度地图以及利用手机GPS定位
- 【PostgreSQL-9.6.3】表空间
- 7c盘满了怎么扩容_C盘爆满怎么办?扩容!
- c语言五子棋双链表,五子棋的悔棋函数怎么写啊。。。双击鼠标左键悔棋(菠萝镇楼)...
- IEC 60335-2-21:2022 安全-第2-21部分:储水式热水器的特殊要求
- [经验] 我想加入阿里,我该怎么做
- vscode试图写入的管道不存在
- 人工智能和5G在无人机技术中的作用
- 通过身份证号码得出性别和年龄
- centos7配置(nvidia+cuda+cudnn+anaconda+tensorflow)gpu开发环境
- VMD/NAMD命令/规则
- 【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?
- Javaweb学习笔记——Javaweb概述
- Elixir - case, cond, and if
- Til the Cows Come Home
- 【车牌识别和动态称重系统】(二)基于树莓派+HyperLPR的中文车牌识别
热门文章
- python爬取链家网的房屋数据
- 为什么互联网人不说“人话”?
- 软件工程导论概念集合
- [附源码]计算机毕业设计Python+uniapp基于android手机设计并实现在线点单系统APPo682z(程序+源码+LW+远程部署)
- 计算机windows7连接打印机
- 电梯默纳克系统服务器,电梯人必看:默纳克系统运行中报E51原因分析和处理方法...
- 计算机教师面试题模板,【小学信息技术教师资格证面试】_小学信息技术教师资格证面试试讲逐字稿万能模板...
- 《被讨厌的勇气》-读后感思维导图
- 什么是工程师文化?-陈皓
- 最小生成树--牛客练习赛43-C