在springboot项目中,实现同时将一批数据进行新增和修改
有时候我们会遇到,用户在前端界面提交一批数据,而这一批数据中,可能有新增的数据也可能存在修改的数据,为了方便同时执行新增和修改的方法,需要调用后端一个接口去完成,我个人的大致思路为:
- 在前端触发提交按钮后,将数据组合为json数组,例如定义一个var attr=[],数组attr中的数据格式我们组合成为attr=[{“id”:“123”,“value”:“你好呀”},{“id”:"",“value”:“大家好”}]的格式,我们可以看到这两条数据里第二条的id是没有的,说明是新增的数据,第一条有id的为需要修改的数据。
- 使用ajax或者其他调用后台接口的方式,将组合好的数据转换为json字符串,可以使用JSON.stringify(attr)进行转换。
- 后端接收前端传来的数据,转换为我们想要的实体集合或者其他类型。
- 将转换的结果数据进行整理,调用对应的批量新增或批量修改的方法。
我个人使用的具体方法实现代码如下:
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")@ResponseBodypublic 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的批量插入和批量修改的博文。欢迎友友们的意见建议。