19、动态SQL之标签的使用
程序员文章站
2022-06-11 16:34:20
...
当更新表时,只更新值不为空的字段。需要用<if>
判断传入的值是否不为空,然后更新值不为空对应的字段。
<update id="updatePerson">
<!-- Set标签的使用 -->
update PERSON
set
<if test="lastName!=null">
last_name=#{lastName},
</if>
<if test="email!=null">
email=#{email},
</if>
<if test="gender!=null">
gender=#{gender}
</if>
where id=#{id}
</update>
上述示例,set 是SQL中的关键字,当哪个if条件判断成功后就插入更新哪个字段,但是上述示例存在一个弊端。如果上述示例中所有的判断都成功时,SQL不存在问题,但当gender判断不成功时,SQL的拼接语句就变成了:
update PERSON set last_name=#{lastName}, email=#{email}, where id=#{id}
从拼接后的语句可以看出,where关键字前面多了一个“,”,结果导致SQL语句失败。
修正方式一:
通过使用<set>
标签来修正上述方式,只需要把上述所有的判断语句放在<set>
标签即可。因为<set>
标签既有set关键字的作用,还可以自动去掉<set>
标签包裹的拼接后的字符串的最后一个“,”。示例如下
<update id="updatePerson">
<!-- Set标签的使用 -->
update PERSON
<set>
<if test="lastName!=null">
last_name=#{lastName},
</if>
<if test="email!=null">
email=#{email},
</if>
<if test="gender!=null">
gender=#{gender}
</if>
</set>
where id=#{id}
</update>
当gender判断不成功时, 标签可以把包裹的字符串拼接的最后一个“,”去掉,就变成了:
set last_name=#{lastName}, email=#{email}
修正方式二:
通过使用<trim>
(已在前一节演示)标签进行修正
<update id="updatePerson">
update PERSON
<trim prefix="set" suffixOverrides=",">
<if test="lastName!=null">
last_name=#{lastName},
</if>
<if test="email!=null">
email=#{email},
</if>
<if test="gender!=null">
gender=#{gender}
</if>
</trim>
where id=#{id}
</update>
当gender判断不成功后,<trim>
标签包裹的字符串拼接后为:
last_name=#{lastName}, email=#{email},
<trim prefix="set" suffixOverrides=",">
指定在拼接的字符串的前面加上set,并且把拼接字符串的最后的“,”去掉,因此最后就变成了:set last_name=#{lastName}, email=#{email}
最后的SQL语句为:
update PERSON set last_name=#{lastName}, email=#{email} where id=#{id}
上一篇: 趋势预测法-PHP实现
推荐阅读
-
MyBatis从入门到精通(八):MyBatis动态Sql之foreach标签的用法
-
动态SQL之(bind)标签使用的两种方式讲解
-
MyBatis从入门到精通(七):MyBatis动态Sql之choose,where,set标签的用法
-
19、动态SQL之
标签的使用 -
MyBatis从入门到精通(八):MyBatis动态Sql之foreach标签的用法
-
JAVAWEB开发之mybatis详解(一)——mybatis的入门(实现增删改查操作)、自定义别名、抽取代码块以及动态SQL的使用
-
MyBatis从入门到精通(七):MyBatis动态Sql之choose,where,set标签的用法
-
动态SQL之(bind)标签使用的两种方式讲解
-
mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用