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

相关推荐
GetcharZp3 小时前
玩转 Linux 机器视觉:手把手带你搞定 Ubuntu 下海康工业相机 C++ SDK
后端
星星在线6 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒7 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x8 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
NE_STOP9 小时前
Vide Coding--AI编程工具的选择
java
袋鱼不重9 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户8356290780519 小时前
使用 Python 操作 Word 内容控件
后端·python
像我这样帅的人丶你还9 小时前
啥? 前端也要会干Java?🛵🛵🛵
后端
Hommy889 小时前
【剪映小助手】添加贴纸接口(Add Sticker)
后端·github·剪映小助手·视频剪辑自动化·剪映api
码云数智-园园9 小时前
C++20 Modules 模块详解
java·开发语言·spring