一、问题
在项目开发中经常会出现对于数据列表的增删改查操作,例如:在编辑一场赛事的时候就会有比赛项目列表,此时就需要实现对于某场赛事对于比赛项目的删除、新增、修改等操作。
二、原因
首先对于以上问题,是因为比赛项目列表的整体提交产生的,导致数据库中的数据与提交数据的不对应。比如:数据库中已存在的比赛项目为1、2、3.而此次编辑后提交的比赛项目为2、3、4。此时就需要删除项目1,然后新增项目4。
三、解决
赛事service
层,这里就只放Impl实现了
@Override
@Transactional
public void updateCompetition(Competition competition) {
// 编辑赛事
int i = adminCompetitionMapper.updateById(competition);
if (i < 1) {
log.error(StrUtil.format("【编辑赛事】编辑赛事失败。"));
throw new BadRequestException(StrUtil.format("【编辑赛事】编辑赛事失败。"));
}
// 维护参赛地点中间表
List<CompetitionAreaMid> competitionAreaMidList = competition.getAreas();
List<Long> airMidIds = new ArrayList<>();
competitionAreaMidList.forEach(competitionAreaMid -> airMidIds.add(competitionAreaMid.getId()));
// 删除参赛地点
LambdaUpdateWrapper<CompetitionAreaMid> areaMidLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
areaMidLambdaUpdateWrapper.eq(CompetitionAreaMid::getCompetitionId, competition.getId())
.notIn(CompetitionAreaMid::getId, airMidIds)
.set(CompetitionAreaMid::getDeleted, true);
adminCompetitionAreaMidService.