sql where后面添加多个if判断 202515361编辑

Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注

sql where后面添加多个if判断

Created by Marydon on 2021-03-25 19:00

1.情景展示

  有时候,我们需添加动态where条件,也就是多个if条件判断,如何实现?

  动态SQL还是很常见的,这里分情况说明

2.mybatis

  mybatis的用法相对简单,是我们经常会用到的

  直接使用<if test=""></if>标签搞定即可

2.mysql

  动态where条件,通常会在存储过程中使用

  通过if()函数实现,使用的关键点在于:1=1,当条件不成立时,执行的是:and 1=1,1=1永远成立,所以不影响其他限制条件的执行

3.oracle

  上面同样可以也能在oracle中通过decode()函数实现

  关键点在于:变量为空的时候,自己=自己,否则的话变量和它作对比。

  mysql和oracle的难点在于:想不到原来还可以这样使用。 

updateTime--2021年10月28日11:25:29

4.关于mybatis的补充

  评论区的园友提出的意见很好,这里对mybatis标签的运用,进行一下补充说明。

  第一,where条件后面的动态SQL语句,有两种使用方式。

  情形1:where后面的第一个条件是必须存在的,后面的限制条件可有可无

  实现方式一:

  使用<if></if>标签

1
2
3
4
where NAME = #{name}
<if test="age != null and age != ''">
    and AGE = #{age}
</if>

  实现方式二:

  使用<where><if></if></where>标签

1
2
3
4
5
6
7
8
<where>
    <if test="name != null and name != ''">
        and NAME = #{name}
    </if>
    <if test="age != null and age != ''">
        and AGE = #{age}
    </if>
</where>

  反正name是非空的,就算加上非空判断也是可行。  

  情形2:where条件后面的条件,都是可有可无的

  实现方式一:

  使用<if></if>标签

1
2
3
4
5
6
7
where 1=1
<if test="name != null and name != ''">
    and NAME = #{name}
</if>
<if test="age != null and age != ''">
    and AGE = #{age}
</if>

  实现方式二:

  使用<where><if></if></where>标签

1
2
3
4
5
6
7
8
<where>
    <if test="name != null and name != ''">
        NAME = #{name}
    </if>
    <if test="age != null and age != ''">
        and AGE = #{age}
    </if>
</where>

  <where>和<if>组合语法说明:

  where 元素只有在1个以上的IF条件成立的情况下才会插入“WHERE”子句(当IF条件都不成立时,SQL语句末尾不会有where);   

  若where后面第一个IF条件成立,且前面带有AND关键词时,会自动将其过滤掉。

  其它语法说明:

  IF条件的test表达式中的and、or不能用&&、 ||代替,如果非要使用,需要转义;

  如果等式(=)左侧是动态字段(变量)的话,正确使用方式为:${变量名},例如:${name}。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

 

与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。

您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!

↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓

posted @   Marydon  阅读(15361)  评论(2编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示