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的批量插入和批量修改的博文。欢迎友友们的意见建议。

相关推荐
与遨游于天地11 分钟前
Spring解决循环依赖实际就是用了个递归
java·后端·spring
陈果然DeepVersion14 分钟前
Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录(六)
java·spring boot·redis·微服务·面试题·rag·ai智能客服
BeingACoder38 分钟前
【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型
java·笔记·学习·saa·springai
DolphinScheduler社区39 分钟前
真实迁移案例:从 Azkaban 到 DolphinScheduler 的选型与实践
java·大数据·开源·任务调度·azkaban·海豚调度·迁移案例
Python私教1 小时前
用 FastAPI + Pydantic 打造“可验证、可热载、可覆盖”的配置中心
后端
Python私教1 小时前
FastAPI “零手工”路由:自动扫描模块、自动注册路由的工程级实践
后端
zhangkaixuan4561 小时前
Apache Paimon 写入流程
java·大数据·apache·paimon
Java爱好狂.2 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
爱宇阳2 小时前
从容器化到自动化:Spring Boot 项目 Docker 部署与 GitLab CI/CD 集成 Harbor 全流程
spring boot·docker·自动化