MySQLSyntaxErrorException:Mybatis:使用foreach进行批量更新查询

时间:2015-02-23 11:55:03

标签: java mysql mybatis

以下是我使用foreachupdate语句编写的批量更新查询。除了update_time之外,任何其他参数都可以为null。 该查询应该将对象列表作为参数并返回void。

<update id="bulkUpdate" parameterType="java.util.List">
<foreach collection="list" item="item"  index="index"  separator=";" >
    UPDATE 
     <include refid="tableName" /> 
    <set>
             update_time=#{item.updateTime}
            <if test="item.testFlg != null">, test_flg=#{item.testFlg}</if>
            <if test="item.DueDate != null">, due_date=#{item.DueDate}</if>
            <if test="item.versionId != null">, version_id=#{item.versionId}</if>
     </set>
     WHERE
    <include refid="tableName" />.order_id=#{item.orderId} 
</foreach>
</update>

调试后,我发现查询正确获取了所有必需的非空值。但是我收到这个让我疯狂的错误。

The error occurred while setting parameters\r\n### SQL: UPDATE        glb_order_tbl        SET update_time=?                                                                                                                                                                                                   , complete_due_date=?                          , version_id=?       WHERE      glb_order_tbl .order_id=? ;             UPDATE        glb_order_tbl        SET update_time=?                                                                                                                                                                                                   , complete_due_date=?                          , version_id=?       WHERE      glb_order_tbl .order_id=? \r\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE \n      glb_order_tbl  \n     SET update_time='2015-02-24 13:01:48.608'\n   ' at line 24\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE \n      glb_order_tbl  \n     SET update_time='2015-02-24 13:01:48.608'\n   ' at line 24"

这似乎是某些语法错误,我无法找到。
我正在使用Java+spring+MyBatis+MySql

更新了查询和错误。请注意,正在设置的参数(内部设置块)可能已更改

提前致谢。

1 个答案:

答案 0 :(得分:1)

此处的问题是您在open关闭中错误地设置了closeseparatorforeach

在你的sql中,它在整个sql的开头追加(,在最后添加),并将每个update sql与,分开。生成的sql肯定有语法错误。

按如下方式更改,它应该有效。

<foreach collection="list" item="item" index="index" separator=";">