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);
            }
        })
    }

2、后端控制层代码:

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

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语句
		}
	}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

春秋云镜 CVE-2023-50564

靶标介绍&#xff1a; Pluck-CMS v4.7.18 中的 /inc/modules_install.php 组件&#xff0c;攻击者可以通过上传一个精心制作的 ZIP 文件来执行任意代码。 开启靶场&#xff1a; 1、点击 admin 进入登录界面 2、使用Burp爆破出登录密码为&#xff1a;admin123&#xff0c;使用…

BIM为电力、供水和道路工程无缝集成,助力智慧城市计划

在道路和公用事业工程中利用 Bentley Open 系列应用程序&#xff0c;项目进度加快 10%&#xff0c;节省成本 1,000 万印度卢比 推动基础设施现代化&#xff0c;实现智慧城市愿景 Dholera特别投资区位于印度艾哈迈达巴德西南 100 公里处&#xff0c;毗邻古吉拉特邦的贸易中心&a…

Bert基础(十八)--Bert实战:NER命名实体识别

1、命名实体识别介绍 1.1 简介 命名实体识别&#xff08;NER&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一项关键技术&#xff0c;它的目标是从文本中识别出具有特定意义或指代性强的实体&#xff0c;并对这些实体进行分类。这些实体通常包括人名、地名、组织…

新闻 | 电子系协同智能中心与昌平区未来高教园及多所高校开展交流,共话智能无人平台建设

2024年4月8日&#xff0c;清华大学电子工程系在北京昌平两岸共盈科技产业园电子系地空协同智能无人平台基地成功举办“美团杯”智能无人机挑战赛&#xff0c;清华大学电子系党委书记沈渊、昌平区未来城管委会校城融合处处长熊玉川、清华大学团委副书记黄峰等出席。此外来自昌平…

【面经】汇总

面经 Java基础集合都有哪些面向对象的三大特点ArrayList和LinkedList的区别&#xff1f;ArrayList底层扩容是怎么实现的&#xff1f;讲一讲HashMap、以及put方法的过程讲一讲HashMap的扩容过程Hashmap为什么要用红黑树而不用其他的树&#xff1f;Java8新特性有哪些LoadFactor负…

Scala 03 —— Scala OOP Extension

Scala 2.1 —— Scala OOP Extension 一、正则 文章目录 Scala 2.1 —— Scala OOP Extension一、正则1.1 Java正则和Scala正则的区别1.2 Java正则和Scala正则的的基本知识点Java正则Scala正则 1.3 练习练习一&#xff1a;使用正则表达式解析日志方法一&#xff1a;使用findAl…

99AI3.3二开稳定版(NineAi内核升级)免授权无后门AI系统源码部署及详细安装教程

99AIv3.3.0是基于 NineAI 二开的可商业化 AI Web 应用&#xff08;免授权&#xff0c;无后门&#xff0c;非盗版&#xff0c;已整合前后端&#xff0c;支持快速部署&#xff09;。未编译源码暂不开源&#xff0c;相比稳定版&#xff0c;开发版进度更快一些。前端改进&#xff1…

【Python】全面掌握 Collections Deque:队列与栈的高效实现及动态内存管理指南

文章目录 第一章&#xff1a;deque 的定义和特性1. 什么是双端队列&#xff08;deque&#xff09;2. deque 与普通列表&#xff08;list&#xff09;的性能差异 第二章&#xff1a;构造函数1. 如何创建一个 deque2. 可选参数 maxlen 的作用和使用场景 第三章&#xff1a;添加和…

vue3使用echarts做树图tree

vue3使用echarts做树图tree 1.安装echarts npm install echarts --save2.在main.js引入 import * as echarts from echarts // 全局方法 app.config.globalProperties.$echarts echarts3.使用 <div id"myChart" :style"{ width: 1000px, height: 1000px …

如何设置“mumu模拟器”使用fiddler抓取APP包?

1、打开fiddler-->tools-->optinons,设置如下信息https信息和connections 2、下载证书tools-->optinons-->https-->actions->Export Root Certificate to Desktop到桌面 3、mumu模拟器&#xff0c;安装证书 1)mumu进入桌面有个文件共享&#xff0c;打开后将桌…

python—字符串与正则表达式

1、编写程序&#xff0c;生成一个由15个不重复的大小写字母组成的列表。 &#xff08;1&#xff09;源代码&#xff1a; import random import string list1 [] while len(list1) < 15: x random.choice(string.ascii_letters) if x not in list1: list1.append(x) print…

pycharm-ieda-phpstorm超级好用插件,一键解释代码

功能&#xff1a;解释你看不懂的代码 当你在写python和Java代码的时候&#xff0c;总有你看不懂的代码&#xff0c;怎么办&#xff1f;csdn搜&#xff1f;那不麻烦&#xff0c;直接插件解决。 来安装&#xff1a;文件-设置 点击插件-Marketplace-搜索通义灵码 安装完成后&…

Qt Creator中变量与函数的注释 - 鼠标悬浮可显示

Qt Creator中变量与函数的注释 - 鼠标悬浮可显示 引言一、变量注释二、函数注释三、参考链接 引言 代码注释在软件开发中起着至关重要的作用。它们不仅有助于开发者理解和维护代码&#xff0c;还能促进团队协作&#xff0c;提高代码的可读性和可维护性。适当的注释应该是简洁明…

VoxAtnNet:三维点云卷积神经网络

VoxAtnNet:三维点云卷积神经网络 摘要IntroductionProposed VoxAtnNet 3D Face PAD3D face point cloud presentation attack Dataset (3D-PCPA) VoxAtnNet: A 3D Point Clouds Convolutional Neural Network for 摘要 面部生物识别是智能手机确保可靠和可信任认证的重要组件。…

16册 | 移动机器人(自动驾驶)系列

此文档整理推荐了16本移动机器人&#xff08;自动驾驶&#xff09;相关的书籍&#xff0c;内容包括&#xff1a;ROS、机器人基础开发、分布式机器人控制、集群机器人控制、嵌入式机器人、多传感器融合等等。 学习&#xff0c;切勿急于求成&#xff0c;读书自学&#xff0c;需多…

栈和队列总结

文章目录 前言一、栈和队列的实现1.栈的具体实现2.循环顺序队列的具体实现 二、栈和队列总结总结 前言 T_T此专栏用于记录数据结构及算法的&#xff08;痛苦&#xff09;学习历程&#xff0c;便于日后复习&#xff08;这种事情不要啊&#xff09;。所用教材为《数据结构 C语言版…

【启明智显技术分享】ESP32系列WiFi无线空中抓包指南

前言&#xff1a; 本文档旨在介绍 windows10 系统下网卡抓包工具(AC-1200)的驱动安装过程、Omnipeek 软件安装过程及Omnipeek软件与网卡抓包工具配合抓包的演示过程。 1、抓包工具(AC-1200)驱动安装 1.1 准备好抓包工具及厂家提供的抓包工具驱动文件 1.2 插上 USB 网卡&…

Linux——socket套接字与udp通信

目录 一、理解IP地址与端口 二、socket套接字 三、TCP与UDP的关系 四、网络字节序 五、socket编程 1.socket()创建套接字 2.填充sockaddr_in 结构体 3.bind() 绑定信息 4.recvfrom()接收消息 5.sendto()发送消息 六、UdpServer代码 一、理解IP地址与端口 IP地址是In…

Leetcode—1256. 加密数字【中等】Plus(bitset、find_first_not_of、erase)

2024每日刷题&#xff08;120&#xff09; Leetcode—1256. 加密数字 实现代码 class Solution { public:string encode(int num) {string ans;num 1;while(num ! 0) {ans to_string(num & 1);num num >> 1;}if(ans.empty()) {return "";} else {stri…

17 如何设计一锤子买卖的SDK

在前三个模块里&#xff0c;我将微服务根据目的性划分为三大类&#xff1a;读、写与扣减类&#xff0c;并针对每一大类涉及的各项技术问题讲解了应对方案。其实&#xff0c;每一类微服务除了本身业务特点涉及的技术问题外&#xff0c;在纯技术维度也有很多共性问题&#xff0c;…