在Mybatis xml映射器文件中,我尝试编写User表的更新查询,如下所示。每个输入参数都可以为null,并且仅在不为null时更新。您不知道哪个“如果”条件可能会遇到,哪个可能成为最后一个条件,因此必须在每个语句中添加逗号。

问题是多余的','导致查询异常。看来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。

最佳答案

感谢MyBatis Generator的mapper.xml文件,我学习了如何隐藏逗号。 MyBatis的标签<set>会删除最后一个逗号。它也用MyBatis - Dynamic Sql编写:



您可以将其编写为:

<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>

关于mysql - MyBatis更新查询中的多余逗号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22853061/

10-11 22:37