在平常开发项目的时候,我们经常会遇到这样的需求,那就是利用Mybatis批量更新或者批量插入,但是,实际上即使Mybatis完美支持你的sql,你也得看看你说操作的数据库是否支持。
问题:
<!-- 批量更新,通过接收传进来的参数list进行循环着组装sql -->
<update id="batchUpdate" parameterType="java.util.List">
<!-- 接收list参数,循环着组装sql语句,注意for循环的写法
separator=";" 代表着每次循环完,在sql后面放一个分号
item="item" 循环List的每条的结果集
collection="list" list 即为 map传过来的参数key -->
<foreach collection="list" separator=";" item="item">
UPDATE `git_commit_logs`
SET `insert_count` = #{item.insertCount},
`delete_count` = #{item.deleteCount},
`effective_count` = #{item.effectiveCount},
`file_count` = #{item.fileCount}
WHERE
`id` = #{item.id}
</foreach>
</update>
看上去没有一点问题,这里用到了Mybatis的动态sql,实际就是拼sql,不过这个繁杂的工作交给Mybatis帮我们去做了。可是,只要一执行就要报语法错误。调试了好久,发现只要传一个值进去就没有问题,就是list的成员只有一个。
解决:
后来发现,原来mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。