在使用Mybatis时,动态SQL非常强大,例如更新:
<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>
当作者或名称不是null时,这起作用,当两个null时它都失败,因为SQL具有语法错误。
我的问题:当<set>
之间的所有测试失败时,是否可以跳过更新,或者我必须编写额外的Java代码才能在执行update
语句之前检查?
不可能使用XML元素进行跳过语句执行。
如果您只想避免编写Java条件,则包括SET
子句中的ID
可能就足够了。
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}