最近在项目中遇到这样一个问题 :
- excel导出数据到数据库(oracle),当数据库中的数据有上万条时,如何进行批量操作
- 这里我用的分批操作,直接上代码:
private void createBatchList(List<Map<String, Object>> list){//这个list就是批量的总数据
List<Map<String, Object>> newList = null;//定义一个新的容器
Map<String,Object> map = new HashMap<String,Object>();
int listSize = list.size();//数据大小
int count = 999; //初始化一个变量,默认1000
//根据变量确定一次处理多少条数据
if( listSize >= 1 && listSize < 1000) {
count = 333;
}else if(listSize >= 1000 && listSize < 10000) {
count = 1333;
}else if(listSize >= 10000) {
count = 5333;
}
int loopSize = (listSize / count) + 1;//循环多少次
for (int i=0;i<loopSize ;i++) {
if((i + 1) == loopSize){
int start = (i * count);
int end = listSize ;//总数
newList = list.subList( start, end);//返回一个List集合的其中一部分视图。包含start,不包含end
} else {
int start = (i * count);
int end = ((i + 1) * count);
newList = list.subList( start, end);
}
configService.insertData(newList);//调用service里面的方法
}
}
- mybatis中:
<insert id="insertData" parameterType="java.util.List">
INSERT INTO table (clumn1,clumn2,clumn3,clumn4,clumn5,clumn6,clumn7,clumn8)
(
<foreach collection="list" item="item" index="index" separator="union all">
select
${item.datas}
from dual
</foreach>
)
</insert>
好了,以上就是我所总结的,亲测3万多条数据用时3s
本人刚入行没多久,如有问题或者更好的方式,请多指教