今天在做项目时,遇到需要批量更新和插入mysql的数据库的情形,批量插入的SQL如下:
<insert id="insert" parameterType="java.util.List">
INSERT INTO tbl_report (
ID,
create_time,
state,
update_time
)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id,jdbcType=VARCHAR},
#{item.createTime,jdbcType=TIMESTAMP},
#{item.state,jdbcType=INTEGER},
#{item.updateTime,jdbcType=TIMESTAMP}
)
</foreach>
</insert>
测试正常没有问题,但是到了批量更新时发生错误,检查后发现语法并没有问题,SQL如下:
<update id="upate" parameterType="java.util.List">
<foreach close="" collection="list" index="index" item="item" open="" separator=";">
update report
<set>
state= 2
</set>
where ID = #{item}
</foreach>
</update>
但是,实际上即使Mybatis完美支持你的sql,你也得看看数据库是否支持。后来发现,原来mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上&allowMultiQueries=true 即可。
加上之后再跑一下代码,问题就解决了