Можно ли пропустить обновление, когда все тесты не пройдены при использовании mybatis с <set>? - PullRequest
0 голосов
/ 14 мая 2019

При использовании 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>

Это работает, когда author или name не равно null, сбой при обоих значениях null, поскольку в SQL есть синтаксическая ошибка.

Мой вопрос: возможно ли пропустить обновление, когда все тесты между <set> не пройдены, или мне нужно написать дополнительный код Java для проверки перед выполнением оператора update?

1 Ответ

1 голос
/ 15 мая 2019

Пропуск выполнения оператора с использованием 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}
...