对于在springboot项目中用for循环与数据库的交互的过程,当数据量非常大时,为了减少与数据库的交互次数,减轻数据库的压力,需将数据做分段提交:
Java的service层:
for(List<OrderMessageDto> oderList : CommonUtil.split(successOderList,100)){
oderCheckDao.updateSuccessCheck(oderList);
}
Java的util工具类(CommonUtil):
public static <T> List<List<T>> split(Collection<T> list,int split){
List<List<T>> result =new ArrayList<List<T>>();
int count=0;
List<T> clist=new ArrayList<>();
for (T t :list){
clist.add(t);
++count;
if (count>=split){
count=0;
result.add(clist);
clist=new ArrayList<>();
}
}
if(count>0){
result.add(clist);
}
return result;
}
Java中mybatis的Mappper层
<update id="updateSuccessCheck">
BEGIN
<foreach collection="list" item="vo">
<!--替换成执行脚本 -->
update sup_orderinfo a where a.order_no=#{vo.orderNo,jdbcType=VARCHAR}
</foreach>
END;
</update>