以下是我使用foreach
和update
语句编写的批量更新查询。除了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
更新了查询和错误。请注意,正在设置的参数(内部设置块)可能已更改
提前致谢。
答案 0 :(得分:1)
此处的问题是您在open
关闭中错误地设置了close
,separator
和foreach
。
在你的sql中,它在整个sql的开头追加(
,在最后添加)
,并将每个update
sql与,
分开。生成的sql肯定有语法错误。
按如下方式更改,它应该有效。
<foreach collection="list" item="item" index="index" separator=";">