MybatisPlus自定义实现saveOrUpdate()方法

在项目开发中,常需要处理数据列表的增删改查,比如编辑赛事时涉及比赛项目的管理。本文针对数据库中数据与提交数据不对应的问题,探讨了如何在MybatisPlus中自定义saveOrUpdate方法,实现对比赛项目列表的删除、新增和修改。通过在赛事层的Impl实现相关方法,可以成功完成赛事中参赛地点和比赛项目列表的更新操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

在项目开发中经常会出现对于数据列表的增删改查操作,例如:在编辑一场赛事的时候就会有比赛项目列表,此时就需要实现对于某场赛事对于比赛项目的删除、新增、修改等操作。

二、原因

首先对于以上问题,是因为比赛项目列表的整体提交产生的,导致数据库中的数据与提交数据的不对应。比如:数据库中已存在的比赛项目为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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值