参考:
一、批量插入两种解决方案
1)for循环调用Dao中的单条插入方法
2)传一个List<Object>参数,使用Mybatis的批量插入 (foreach)
对于批量插入它的Mapper看起来向这样
<insert id="addUser" parameterType="java.util.List" >
insert into user(name,age) values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.name},#{item.age})
</foreach>
</insert>
二、这两种方案首先在性能上,肯定是批量插入性能好,更加省时间。
原因如下:
循环插入:需要每次都获取session,获取连接,然后将sql 语句发给mysql 去执行(JDBC一般情况下是通过TCP/IP 进行连接和数据库进行通信的)。可以看这里 mysql四种通信协议
批量插入: 批量插入通过foreach 标签,将多条数据拼接在sql 语句后,一次执行只获取一次session,提交一条sql语句。减少了程序和数据库交互的准备时间。
三、批量插入数据量的限制
mysql对语句的长度有限制,默认是 4M
四、解决mysql对语句的长度有限制问题
Windows下修改mysql的my.ini文件
max_allowed_packet = 500M
重启mysql