Mybatis-Plus批量添加或修改数据的三种方式

SpringBoot批量添加或修改数据的三种方式

方式一.Mybatis-plus 提供的 saveOrUpdateBatch

提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加

Mybatis-Plus批量添加或修改数据的三种方式_第1张图片

image-20230411142521452

方式二.分组数据再批量添加或修改

先获取表中所有的主键 ,然后 判断是否已存在,存在更新,不存在添加

        queryWrapper = new QueryWrapper<>();
        queryWrapper.select("PROC_INSTANCEID");
        List bpmProcInstanceList = iBpmProcInstanceDaoService.list(queryWrapper);
        //获取所有主键
        List procList = bpmProcInstanceList.stream().map(BpmProcInstance::getProcInstanceid).collect(Collectors.toList());
        //分组
        Map> booleanListMap = bpmProcInstances.stream().collect(Collectors.groupingBy(b -> {
            return procList.contains(b.getProcInstanceid());
        }));
        //true 则更新  false 修改
        iBpmProcInstanceDaoService.updateBatchById( booleanListMap.get(true));
        iBpmProcInstanceDaoService.saveBatch( booleanListMap.get(false));

方式三. 利用MySQL的on duplicate key update

on duplicate key update 是Mysql特有的语法,如下图所示,表中id 为主键

Mybatis-Plus批量添加或修改数据的三种方式_第2张图片

再插入id为1的数据,则提示主键已存在

改成如下SQL,则当主键重复时,将更新 字段 name 的值

INSERT into  provider values (1,'w') ON DUPLICATE KEY UPDATE `name` = 'w';

因此我们可以编写如下的XML映射语句

 insert into 表名 (需插入的字段)
        values
        
        	#插入的数据
        
        
        ON DUPLICATE KEY UPDATE
        # 当主键重复时,需要更新的字段以及对应的数据
        字段名1=VALUES(字段名1),
        字段名2 =VALUES(字段名2)
        ......
        

你可能感兴趣的:(spring,boot,mybatis,java,mybatis-plus)