关于对数据库的批量操作问题

今天在代码中写一个循环插入和修改,被大佬批了一顿,我原本的写法

//插入新的关系
		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 taskDevlightLinklist = new ArrayList();
		List dev2list = new ArrayList();

		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);//更新信号灯状态

修改循环过后进行批量操作

 

你可能感兴趣的:(日常笔记)