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

ops/2024/9/23 4:31:44/

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


http://www.ppmy.cn/ops/21073.html

相关文章

关于加强电力系统通信与电网调度自动化建设问题的规定

关于加强电力系统通信与电网调度自动化建设问题的规定 为了保障电力系统安全、经济、优质、可靠运行&#xff0c;必须加强电网调度管理和提高技术装备水平。根据当前电网技术装备状况&#xff0c;结合电力系统通信和电网调度自动化的特点&#xff0c;以及今后规划发展的要求&am…

sqlite3

退出数据库登录 sqlite> .quit打开数据库 sqlite3 /var/lib/rancher/k3s/server/db/state.db或者 sqlite3 sqlite> .open /var/lib/rancher/k3s/server/db/state.db查看该库中所有表 sqlite> .tables输出 kine统计该表数据行数 sqlite> select count(*) from…

英语六级常用词汇2

英语六级常用词汇1 blush [blʌʃ] 脸红&#xff08;名词、动词&#xff09;&#xff1a;面部因羞愧、激动或尴尬而变红。Example: She began to blush when they complimented her.翻译&#xff1a; 当他们称赞她时&#xff0c;她开始脸红。 pedal [ˈpɛdəl] 踏板&#xff…

公开课学习——基于索引B+树精准建立高性能索引

文章目录 遇到慢查询怎么办&#xff1f;—— 创建索引联合索引的底层的数据存储结构长什么样&#xff1f; mysql脑图 阿里开发手册 遇到慢查询怎么办&#xff1f;—— 创建索引 不用索引的话一个一个找太慢了&#xff0c;用索引就快的多。 假如使用树这样的结构建立索引&#x…

高速风筒电源IC辉芒微FT8440E /FT8440A

深圳市三佛科技有限公司分享相关资料&#xff0c;高精度、高效率、低成本离线式功率开关 FT8440x是-款高性能、高精度、低成本的非隔离PWM功率开关。它包含一个专门]的电流模PWM控制器和一个高压功率开关管。内置的误差放大器经过优化保证优越的动态响应。高精度的内部分压电阻…

vue2[黑马笔记]

vue基础 是什么—javascript框架 构建用户界面的前端框架 1.构建用户界面用vue往html页面中填充数据 2.框架现成的解决方案&#xff0c;遵守框架的规范去实现自己的业务功能学习vue 就是学习vue框架中规定的用法vue的指令组件&#xff08;对ul结构的复用&#xff09;&#x…

可替换XC6206P332MR的润石超低功耗LDO RS3221-3.3YF3助力智能门锁设计,精度低至1%

润石科技的RS3221&#xff0c;可满足超低功耗&#xff0c;在智能门锁设计时&#xff0c;兼容替换TOREX的XC6206P332MR&#xff0c;具体请参考图1参数对比&#xff1a; 图1&#xff1a;RS3221-3.3YF3与XC6206P332MR电性能参数对比 通过上表可知&#xff0c; 1、 RS3221-3.3YF3…

leetcode905-Sort Array By Parity

题目 给你一个整数数组 nums&#xff0c;将 nums 中的的所有偶数元素移动到数组的前面&#xff0c;后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 示例 1&#xff1a; 输入&#xff1a;nums [3,1,2,4] 输出&#xff1a;[2,4,3,1] 解释&#xff1a;[4,2,3,1]、[2,…