sql where后面添加多个if判断
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>标签
where NAME = #{name} <if test="age != null and age != ''"> and AGE = #{age} </if>
实现方式二:
使用<where><if></if></where>标签
<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>标签
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>标签
<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}。
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/14578783.html