MyBatis дополнительная запятая в запросе обновления
в файле MyBatis xml mapper я попытался написать запрос обновления для таблицы пользователя, как показано ниже. Каждый из входных параметров может быть нулевым, и я обновляю только тогда, когда он не равен нулю. Вы не знаете, какое условие "если" может провалиться и какое может быть последним, поэтому запятая должна быть добавлена в каждое утверждение.
проблема в том, что extra', ' вызывает исключение запроса. Кажется, Mybatis не игнорирует дополнительную запятую.
мой обходной путь-поставить " id = #{id}" в конце, который исправил проблему, но она избыточна.
каково реальное решение?
код:
<update id="update" parameterType="User">
UPDATE user SET
<if test="username != null">
username = #{username},
</if>
<if test="password != null">
password = #{password},
</if>
<if test="email != null">
email = #{email},
</if>
id= #{id} // this is redundant
WHERE id = #{id}
</update>
PS: среда, которую я использую, это: Java Spring + MyBatis + MySQL.
1 ответов
спасибо Генератор MyBatis'ы картографа.XML-файлы, я научился подавлять запятые. MyBatis имеет тег <set>
это стирает последнюю запятую. Это также написано в MyBatis-Динамический Sql:
здесь элемент set будет динамически добавлять ключевое слово SET и также исключите любые посторонние запятые, которые могут отслеживать значение назначения после применения условий.
Вы можете написать его as:
<update id="update" parameterType="User">
UPDATE user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="password != null">
password = #{password},
</if>
<if test="email != null">
email = #{email},
</if>
</set>
WHERE id = #{id}
</update>