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


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

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

    1. 在前端触发提交按钮后,将数据组合为json数组,例如定义一个var attr=[],数组attr中的数据格式我们组合成为attr=[{“id”:“123”,“value”:“你好呀”},{“id”:"",“value”:“大家好”}]的格式,我们可以看到这两条数据里第二条的id是没有的,说明是新增的数据,第一条有id的为需要修改的数据。
    2. 使用ajax或者其他调用后台接口的方式,将组合好的数据转换为json字符串,可以使用JSON.stringify(attr)进行转换。
    3. 后端接收前端传来的数据,转换为我们想要的实体集合或者其他类型。
    4. 将转换的结果数据进行整理,调用对应的批量新增或批量修改的方法。
      我个人使用的具体方法实现代码如下:
      1、前端请求的代码:
    	// 请求后台接口
        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);
                }
            })
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2、后端控制层代码:

    	/**
    	 * 批量保存数据
    	 */
    	@PostMapping(value = "batchData")
    	@ResponseBody
    	public String batchData(String attrList) {
    		List<Test> list = JSON.parseArray(attrList, Test.class);
    		testService.batchData(list);
    		return "保存成功";
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、后端业务逻辑代码:

    	/**
    	 * 批量保存数据的具体业务逻辑方法
    	 */
    	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语句
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

  • 相关阅读:
    Linux基础
    jvm的结构以及如何调优
    Spring Cloud Alibaba Nacos 的 2 种健康检查机制!
    总结 Thread 类的基本用法
    云小课|云小课教您如何选择Redis实例类型
    Python-进程和线程
    点击按钮切换显示和隐藏,点击空白处隐藏盒子
    Graph Self-Supervised Learning: A Survey
    Lua速成(1)
    Visopsys 0.92 发布
  • 原文地址:https://blog.csdn.net/weixin_45465881/article/details/138183580