通过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}
实现方式二:
使用<where><if></if></where>标签
<where>
<if test="name != null and name != ''">
and NAME = #{name}
<if test="age != null and age != ''">
and AGE = #{age}
</where>
反正name是非空的,就算加上非空判断也是可行。
情形2:where条件后面的条件,都是可有可无的
实现方式一:
使用<if></if>标签
where 1=1
<if test="name != null and name != ''">
and NAME = #{name}
<if test="age != null and age != ''">
and AGE = #{age}
实现方式二:
使用<where><if></if></where>标签
<where>
<if test="name != null and name != ''">
NAME = #{name}
<if test="age != null and age != ''">
and AGE = #{age}
</where>
<where>和<if>组合语法说明:
where 元素只有在1个以上的IF条件成立的情况下才会插入“WHERE”子句(当IF条件都不成立时,SQL语句末尾不会有where);
若where后面第一个IF条件成立,且前面带有AND关键词时,会自动将其过滤掉。
其它语法说明:
IF条件的test表达式中的and、or不能用&&、 ||代替,如果非要使用,需要转义;
如果等式(=)左侧是动态字段(变量)的话,正确使用方式为:${变量名},例如:${name}。
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
sql where条件后面跟select语句的三种实现方式
ibatis中#和$如何当作字符使用?