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>