springboot实现同时批量新增和批量修改数据

在springboot项目中,实现同时将一批数据进行新增和修改

有时候我们会遇到,用户在前端界面提交一批数据,而这一批数据中,可能有新增的数据也可能存在修改的数据,为了方便同时执行新增和修改的方法,需要调用后端一个接口去完成,我个人的大致思路为:

  1. 在前端触发提交按钮后,将数据组合为json数组,例如定义一个var attr=[],数组attr中的数据格式我们组合成为attr=[{"id":"123","value":"你好呀"},{"id":"","value":"大家好"}]的格式,我们可以看到这两条数据里第二条的id是没有的,说明是新增的数据,第一条有id的为需要修改的数据。
  2. 使用ajax或者其他调用后台接口的方式,将组合好的数据转换为json字符串,可以使用JSON.stringify(attr)进行转换。
  3. 后端接收前端传来的数据,转换为我们想要的实体集合或者其他类型。
  4. 将转换的结果数据进行整理,调用对应的批量新增或批量修改的方法。
    我个人使用的具体方法实现代码如下:
    1、前端请求的代码:
javascript 复制代码
	// 请求后台接口
    function requestApi() {
        // 组合数据
        let attr = [
            {id: '123',value: '你好呀'},
            {id: '456',value: '友友们'},
            {id: '',value: '新来的友友们'},
            {id: '000',value: '进我主页~'},
            {id: '',value: '大家好'},
            {id: '789',value: '关注分享更多内容呦~'},
        ];
        // 请求接口
        $.ajax({
            url:'/test/api/batchData',
            method:'POST',
            data:{
                attrList: JSON.stringify(attr)
            },
            success:function (res) {
                // 返回结果
                alert('返回结果'+res);
            }
        })
    }

2、后端控制层代码:

java 复制代码
	/**
	 * 批量保存数据
	 */
	@PostMapping(value = "batchData")
	@ResponseBody
	public String batchData(String attrList) {
		List<Test> list = JSON.parseArray(attrList, Test.class);
		testService.batchData(list);
		return "保存成功";
	}

3、后端业务逻辑代码:

java 复制代码
	/**
	 * 批量保存数据的具体业务逻辑方法
	 */
	public void batchData(List<Test> list) {
		// 分别定义新增和更新的实体集合
		List<Test> insertData = new ArrayList<>();
		List<Test> updateData = new ArrayList<>();
		// 将新增和更新的数据分别添加到对应的集合中
		for(Test data:list){
			if(StringUtils.isEmpty(data.getId())){
				insertData.add(data);
			}
			if(!StringUtils.isEmpty(data.getId())){
				updateData.add(data);
			}
		}
		// 判断集合是否有数据,避免不必要的执行
		if(insertData.size()>0){
			dao.insertBatch(insertData); // 调用批量新增执行的SQL语句
		}
		if(updateData.size()>0){
			dao.updateBatch(updateData); // 调用批量修改执行的SQL语句
		}
	}

这是我个人的方法,肯定还有其他更快捷,性能更好的实现方法,优化空间很大,具体dao调用的批量插入或者批量修改的SQL,可根据自身的需求编写,或可进入我的主页,查看关于mybatis的批量插入和批量修改的博文。欢迎友友们的意见建议。

相关推荐
LKAI.34 分钟前
传统方式部署(RuoYi-Cloud)微服务
java·linux·前端·后端·微服务·node.js·ruoyi
HeyZoeHey36 分钟前
Mybatis执行sql流程(一)
java·sql·mybatis
2301_7930868739 分钟前
SpringCloud 07 微服务网关
java·spring cloud·微服务
Victor3561 小时前
Redis(11)如何通过命令行操作Redis?
后端
Victor3561 小时前
Redis(10)如何连接到Redis服务器?
后端
柳贯一(逆流河版)2 小时前
Spring 三级缓存:破解循环依赖的底层密码
java·spring·缓存·bean的循环依赖
他日若遂凌云志2 小时前
深入剖析 Fantasy 框架的消息设计与序列化机制:协同架构下的高效转换与场景适配
后端
快手技术3 小时前
快手Klear-Reasoner登顶8B模型榜首,GPPO算法双效强化稳定性与探索能力!
后端
二闹3 小时前
三个注解,到底该用哪一个?别再傻傻分不清了!
后端
用户49055816081253 小时前
当控制面更新一条 ACL 规则时,如何更新给数据面
后端