今天在做项目时,遇到需要批量更新和插入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 即可。
加上之后再跑一下代码,问题就解决了