使用mybatis时,动态SQL非常强大,例如用于UPDATE:
<update id="update">
UPDATE BOOKS
<set>
<if test="book.author != null">AUTHOR=#{book.author},</if>
<if test="book.name != null">NAME=#{book.name}</if>
</set>
WHERE ID=#{book.id}
</update>
当author或name不为null时,此方法有效,而当两个均为null时,则失败,因为SQL语法错误。
我的问题:<set>
之间的所有测试失败时是否可以跳过更新,还是我必须在执行update
语句之前编写额外的Java代码进行检查?
答案 0 :(得分:1)
无法使用XML元素跳过语句。
但是,如果您只是想避免编写Java条件,则在ID
子句中包含SET
就足够了。
UPDATE BOOKS
SET
ID = #{book.id}
<if test="book.author != null">, AUTHOR=#{book.author}</if>
<if test="book.name != null">, NAME=#{book.name}</if>
WHERE ID = #{book.id}