其他链接:
mysql模糊查询 like与locate效率
https://blog.csdn.net/qq_33745371/article/details/106673790
mybatis进行百万批量插入(我行),mysql进行百万批量插入(我不行)
https://blog.csdn.net/qq_33745371/article/details/106630478
mysql新建数据库字符集和排序规则
https://blog.csdn.net/qq_33745371/article/details/106459524
分批次批量插入
假设我们的List<Person>集合一共有1200条数据。分批次,一次500条。
Person类只有三个字段:id,name,age。
1.在service层写java代码,进行分批
具体步骤写在了下面的代码里,注释也有。
//假设personList中有1200条数据
//一次500条,分num次插入,num为3。
int num = (personList.size() / 500)+1;
//最后一次插入lastNumber条,取余数,lastNumber为200。
int lastNumber = personList.size() % 500;
//插入,会循环3次
for(int i=0;i<num;i++){
//集合插入的起始位置
int index = i*500;
//集合插入的终止位置
int end = (i+1)*500;
//声明一个list集合,用于存放每次批量插入的数据
List<Person> list;
if(i==num-1){
//subList(index, end),list集合的下标从0开始,[index,end) subList包含index,不包含end。
//最后一次插入 subList(index, index+lastNumber)<==>subList(1000, 1200)
list = personList.subList(index, index+lastNumber);
}else{
//非最后一次插入 subList(index, end)<==>subList(500*i, 500*(i+1))
list = personList.subList(index, end);
}
//调用dao层的批量插入方法
personDAO.addPersonList(list);
2.在dao层写接口
//dao层接口
int addObjectList(List<Object> list);
3.在dao.xml写批量插入
Person类只有三个字段:id,name,age。id为主键,自动递增,我们不需要写。
数据库的表名:person。
collection为传入的类型,这里我们传入的是list。
item为当前元素。
separator为分隔符
//批量插入
<insert id="addObjectList">
insert into person(name,age) values
<foreach collection="list" item="person" separator=",">
(#{person.name},#{person.age})
</foreach>
</insert>