如果你有做什么一键生成数据或者批量导入数据的功能,切忌不要一条条来插入,否则会极其影响效率。
案例
1、业务逻辑
这边要一键生成一批数据,可能会几条、几十条、几百条或者上千几万条。
2、伪代码
这边打算用mybatis的foreach来批量插入,java伪代码如下
List<Data> list = 从数据库或者文件里面获得
List<Data> nowData = new ArrayList<>();
//1、循环处理
for(Data data:list){
//2、加入当前处理集合
nowData.add(data);
if(nowData.size()>=500){
//3、如果大于等于500条,则批量处理
dealDatas(nowData);
//4、处理完后清空当前数据
nowData.clear();
}
}
//如果当前数据还有剩余,也就是不够500条,继续处理完
if(nowData.size()>0){
dealDatas(nowData);
nowData.clear();
}
处理对应mybatis xml如下
<insert id="insertDatas">
insert into t_data (id,name)
values
<foreach collection="data" item="item" index="index" separator=",">
(#{item.id},#{item.name})
</foreach>
</insert>
3、注意事项
上面是500条处理一批,是因为我的处理逻辑里面还需要将500条先in查询一下是否存在,而in如果太多会报错,比如1000条以上,这里当然也可以改为800这些,看个人需要,通过测试发现500已经满足我当下的业务需求了。