原 java mybatis plus实现分批查询,批量新增
版权声明:本文为博主原创文章,请尊重他人的劳动成果,转载请附上原文出处链接和本声明。
本文链接:https://www.91mszl.com/zhangwuji/article/details/1264
int pageNum=1;
int pageSize=1000;
int offset=(pageNum - 1) * pageSize;
while (true){
List<RegionArea> regionAreaList=regionAreaMapper.selectRegionArea(offset, pageSize);
if(CollectionUtils.isEmpty(regionAreaList)){
break;
}
List<BusinessRegionArea> newRegionAreaList=new ArrayList();
regionAreaList.forEach(item -> {
BusinessRegionArea bra=new BusinessRegionArea();
bra.setId(IdUtil.getSnowflake(1, 1).nextId());
bra.setRegionCode(item.getRegionCode());
bra.setGdLng(item.getGdLng());
bra.setGdLat(item.getGdLat());
bra.setGdBoundar(item.getGdBoundar());
bra.setGdBoundarJson(item.getGdBoundarJson());
bra.setGdBoundarJsonSimplify(item.getGdBoundarJsonSimplify());
bra.setCreateTime(LocalDateTime.now());
newRegionAreaList.add(bra);
});
// 批量处理
int add=businessRegionAreaMapper.batchInsert(newRegionAreaList);
newRegionAreaList.clear(); // 清空
pageNum++;
offset=(pageNum - 1) * pageSize;
}
sql:
select * from retail.mszl_region limit #{pageSize,jdbcType=INTEGER} offset #{offset,jdbcType=INTEGER}
int total=300000; // 总记录数
int batchCount=5000; // 每次批量取的数据
int count=(int)Math.ceil((double)total/batchCount); // 向上取整
long maxId=1;
for(int h=0; h<count; h++){
params.put("maxId", maxId);
params.put("batchCount", batchCount);
List<ProductMonth> productList=productMonthMapper.selectJmlProductInfo(params);
if(null!=productList && productList.size()>0){
for(int i=0; i<productList.size(); i++){
long pid=productList.get(i).getId();
if(i==productList.size()-1){ // 如果是最后一个id则赋值给maxId
maxId=pid;
}
// 自己的业务处理。。。
}
}
}
<select id="selectJmlProductInfo" resultMap="BaseResultMap">
select
j.id, j.product_name, j.org_all_name, j.sales_num as salesNum, p.product_no
from d_data_detail_jml j
where j.id > #{maxId} order by j.id limit #{batchCount}
</select>
2020-08-23 16:46:58 阅读(3967)
名师出品,必属精品 https://www.91mszl.com
博主信息