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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);//更新信号灯状态

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

猜你喜欢

转载自blog.csdn.net/qq_34178998/article/details/85283881