MybatisPlus自定义实现saveOrUpdate()方法

一、问题

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

二、原因

首先对于以上问题,是因为比赛项目列表的整体提交产生的,导致数据库中的数据与提交数据的不对应。比如:数据库中已存在的比赛项目为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.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MybatisPlus中的saveOrUpdate是一个方法,用于在数据库中保存或更新一个实体对象。如果该对象在数据库中已经存在,则会更新该对象的属性值;如果该对象在数据库中不存在,则会将该对象插入到数据库中。该方法会根据实体对象的主键值来判断该对象是否已经存在于数据库中。如果实体对象的主键值为null,则会将该对象插入到数据库中。如果实体对象的主键值不为null,则会根据主键值来更新该对象的属性值。 ### 回答2: saveorupdatemybatisplus中的一个重要方法,它可以实现数据库的操作,可以将对象实例转化成对应的SQL语句进行数据库的操作。 saveorupdate方法用于更新或保存实体,如果对象的主键值为空则保存该实体,如果对象的主键值不为空则更新该实体。在mybatis中,通过saveorupdate方法实现CRUD操作十分方便,在更新实体时,首先需要查询到要更新的实体,然后将新的值设置给该实体对象,最后通过saveorupdate方法进行更新。 在mybatisplus中,saveorupdate实现依赖于该方法对应的XML文件,XML文件中存储了SQL语句和映射关系。此外,在进行数据库操作时,saveorupdate还支持延迟加载、批量操作和分页操作等功能。 在日常开发中,我们常用到saveorupdate方法进行数据的插入和更新,在实际使用过程中需要注意避免出现异常错误以及数据的一致性问题。同时,在应用程序中,还需要考虑到缓存维护和数据库事务的处理等方面。因此,在设计应用程序时需要综合考虑各种因素,合理使用saveorupdate方法实现数据的持久化操作。 ### 回答3: MybatisPlus中的saveOrUpdate方法是一个非常方便的方法,它可以根据传入的实体类对象自动判断是执行新增操作还是执行更新操作。 当传入的实体类对象中存在主键值时,saveOrUpdate方法会执行更新操作,即先根据主键值查询数据库中是否存在该记录,如果存在则执行更新操作,否则执行新增操作。 当传入的实体类对象中不存在主键值时,saveOrUpdate方法会执行新增操作,即直接将该对象插入到数据库中。 需要注意的是,saveOrUpdate方法中如果执行的是更新操作,建议在更新前先执行一个查询操作,判断该记录是否存在,以避免因为主键值不存在导致的异常。 此外,MybatisPlus中的saveOrUpdate方法支持批量操作,即传入的参数为一个实体类对象集合时,会自动进行批量操作,效率非常高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值