SpringBoot批量添加或修改数据的三种方式
方式一.Mybatis-plus 提供的 saveOrUpdateBatch
提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加
方式二.分组数据再批量添加或修改
先获取表中所有的主键 ,然后 判断是否已存在,存在更新,不存在添加
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 为主键
再插入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) ......
来源地址:https://blog.csdn.net/JAVAlife2021/article/details/130084813