MyBatis动态SQL----where和set标签

多条件的矛盾

如果要进行多条件判断,就会写成这样:

<select id="listProduct" resultType="Product">

select * from product_

<if test="name!=null">

where name like concat('%',#{name},'%')

</if>

<if test="price!=0">

and price > #{price}

</if>

</select>


这么写的问题是:当没有name参数,却有price参数的时候,执行的sql语句就会是:

select * from product_ and price > 10.
这样执行就会报错

where标签

这个问题可以通过<where>标签来解决,如代码所示

<select id="listProduct" resultType="Product">

select * from product_

<where>

<if test="name!=null">

and name like concat('%',#{name},'%')

</if>

<if test="price!=null and price!=0">

and price > #{price}

</if>

</where>

</select>


<where>标签会进行自动判断
如果任何条件都不成立,那么就在sql语句里就不会出现where关键字
如果有任何条件成立,会自动去掉多出来的 and 或者 or。

set标签

与where标签类似的,在update语句里也会碰到多个字段相关的问题。 在这种情况下,就可以使用set标签:

<set>

<if test="name != null">name=#{name},</if>

<if test="price != null">price=#{price}</if>

</set>


其效果与where标签类似,有数据的时候才进行设置。

猜你喜欢

转载自blog.csdn.net/huanniangyuan5422/article/details/81232709
今日推荐