mybatis的BATCH 批量提交的实现代码参考
@Resource
private SqlSessionTemplate sqlSessionTemplate;
//批量插入
List<BeventInfoDetail> list = new ArrayList<BeventInfoDetail>();
for(int i =0; i < idsArray.length; i++) {
//路况详情ID
Long trafficDetailId = UniqueIdUtil.genId();
beventxs.setTrafficDetailId(trafficDetailId);
//位置id(收费站id、互通id)
beventxs.setPositionId(idsArray[i]);
//位置名称 收费站名称
beventxs.setPositionName(pnsArray[i]);
//更新时间
beventxs.setUpdateDate(new Date());
BeventInfoDetail beventxsCopy = new BeventInfoDetail();
beventxsCopy = beventxs;
list.add(beventxsCopy);
}
//集合非空
if (CollectionUtils.isEmpty(list)) {
resultmap.put("code", 0);
resultmap.put("des", "插入管制详情表 数据组装为空");
return resultmap;
}
//如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出--, false
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
//不自动提交
try {
BeventInfoDetailDao beventInfoDetailMapper = session.getMapper(BeventInfoDetailDao.class);
for (int i = 0; i < list.size(); i++) {
//插入管制详情表 B_EVENT_INFO_DETAIL
beventInfoDetailMapper.add(list.get(i));
if (i % 400 == 0 || i == list.size() - 1) {
//手动每400条提交一次,提交后无法回滚
session.commit();
//清理缓存,防止溢出
session.clearCache();
}
}
} catch (Exception e) {
//没有提交的数据可以回滚
session.rollback();
resultmap.put("code", 0);
resultmap.put("des", "插入管制详情表 失败");
e.printStackTrace();
return resultmap;
} finally {
session.close();
}