java批量新增(list拆开再新增)

应用场景:导入数据时获取到Excel表格中几万条数据,需要把这些数据存入数据库
数据量过大时tomcat启动中可能出现内存溢出的情况,这时可以在tomcat的bin目录下的catalina.bat的最开头添加如下代码:

set JAVA_OPTS=%JAVA_OPTS% -Xms512M -Xmx1024M -server -XX:PermSize=512M -XX:MaxPermSize=1024M

下面就是开始添加数据了

int batchSaveLandData(@Param("tlandDatas")List<TlandData> tlandDatas);
<insert id="batchSaveLandData">
	insert into t_land_data(lid,fid,ofid,type,x,y,updatetime,createtime)
	values
	<foreach collection="tlandDatas" item="item" separator=",">
		(#{item.lid},#{item.fid},#{item.ofid},#{item.type},#{item.x},#{item.y},now(),now())
	</foreach>
</insert>
@Transactional(readOnly=false)
public int batchSave(List<TlandData> list) {
	return tlandDataDao.batchSaveLandData(list);
}

Excel导入的数据在工具类方法中会把数据解析并存入集合中,我们在存导入的数据到数据库时,不推荐直接调用批量新增方法,这样保存数据相应会慢很多,将list拆开来分批新增能使新增数据速度大大提升,在测试时以80到100条分批插入数据是最快的,当然,也可以自己再测试一次,不同配置的电脑性能方面是不同的

if (li1 != null && li1.size() >0) {
	int size = li1.size();
	int limitSize = 80;	// 限制条数(测试时80-100左右速度最快)
	if (limitSize < size) {
		int part = size % limitSize > 0 ? (size / limitSize + 1) : size / limitSize; // 分批数
		for (int i = 0; i <= part; i++) {
			if (limitSize < li1.size()) {
				List<TlandData> listPage = li1.subList(0, limitSize);
				tlandDataService.batchSave(listPage);
				// 将已添加的数据去掉
				li1.subList(0, limitSize).clear();
			} else {
				tlandDataService.batchSave(li1);
			}
		}
	} else {
		tlandDataService.batchSave(li1);
	}
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值