版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34178998/article/details/85283881
今天在代码中写一个循环插入和修改,被大佬批了一顿,我原本的写法
//插入新的关系
for(Long taskids:tosaveList){
if (lightid==null||taskids==null ) {
return;
}else{
TaskDevlightLink taskDevlightLink = new TaskDevlightLink();
taskDevlightLink.setLightDevId(lightid);
taskDevlightLink.setTaskId(taskids);
taskDevlightLink.setCreateTime(new Date());
taskDevlightLinkServiceImpl.insert(taskDevlightLink);//插入信号灯与任务关联表
DevTrafficLight devTrafficLight2 = new DevTrafficLight();
devTrafficLight2.setId(lightid);
devTrafficLight2.setIsLinkTask(1);
devTrafficLightService.updateById(devTrafficLight2);//更新信号灯状态
}
}
这种写法,是不合理的,在for循环中进行插入和更新操作数据量大的时候会造成数据死锁
// 插入新的关系
List<TaskDevlightLink> taskDevlightLinklist = new ArrayList<TaskDevlightLink>();
List<DevTrafficLight> dev2list = new ArrayList<DevTrafficLight>();
if (lightid == null||tosaveList.size()==0) {
return;
} else {
for (Long taskids : tosaveList) {
TaskDevlightLink taskDevlightLink = new TaskDevlightLink();
taskDevlightLink.setLightDevId(lightid);
taskDevlightLink.setTaskId(taskids);
taskDevlightLink.setCreateTime(new Date());
taskDevlightLinklist.add(taskDevlightLink);
DevTrafficLight devTrafficLight2 = new DevTrafficLight();
devTrafficLight2.setId(lightid);
devTrafficLight2.setIsLinkTask(1);
dev2list.add(devTrafficLight2);
}
}
taskDevlightLinkServiceImpl.insertBatch(taskDevlightLinklist);//插入信号灯与任务关联表
devTrafficLightService.updateBatchById(dev2list);//更新信号灯状态
修改循环过后进行批量操作