将Mybatis与<set>一起使用时,如果所有测试均失败,是否可以跳过更新?

时间:2019-05-14 15:58:46

标签: java mybatis

使用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代码进行检查?

1 个答案:

答案 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}