网站首页 > java教程 正文
开发中,经常会遇到新增,删除,更新的操作。
比如要编辑一道题目的4个选项,前端一般是4个选项为一组提交,那么提交的数据操作有3种
序号 | 前端提交数据 | 后台数据库数据 | 操作 |
1 | 存在 | 不存在 | 新增数据 |
2 | 存在 | 存在 | 修改 |
3 | 不存在 | 存在 | 删除 |
一般小伙伴操作时图省事,不管3721,先把DB中的数据Delete,那就只需要考虑第一种新增情况啦,是不是很简单, 但如果设计中有用到自增ID,那么删除数据肯定会有问题。
所以,我们要考虑不删除数据的情况,也就是分别做3种情况的校验。
先考虑删除情况, 这里的删除也仅是逻辑删除,再处理新增和修改操作就简单了。
直接上伪代码,
// 常规操作:新增、更新、删除
List<Qa> old = find();
// 数据库数据,保存主键
List<Integer> originalEvent = old.stream().map(Qa::getId).collect(Collectors.toList());
// 前端传入的数据,也保存主键
List<Integer> paramEvent = dto.stream().map(DTO::getId).collect(Collectors.toList());
// 删除操作,获取在DB,但不在DTO的数据
List<Integer> toDelete = originalEvent.stream().filter(item -> !paramEvent.contains(item)).collect(Collectors.toList());
List<Qa> toList = old.stream().filter(e -> toDelete.contains(e.getId())).collect(Collectors.toList());
if (!toList.isEmpty()) {
//将待删除的记录更新为删除
for (Qa qa : toList) {
qa.setDeleteFlag(Boolean.TRUE);
}
qaDao.save(toList);
}
// 遍历前端提交的数据, DB存在则更新,不存在则新增
for (QaDTO dto : Dto) {
Qa qa = qaDao.getById(dto.getId());
if (qa == null) {
// 新增操作
} else {
// 更新操作
}
}
猜你喜欢
- 2024-10-22 「是时候升级Java11了」 JDK11优势和JDK选择
- 2024-10-22 一文读懂关于Java如何找出两个列表之间的新增和删除元素
- 2024-10-22 JAVA 面试高频提问知识点之:SET、LIST 和 MAP 的区别
- 2024-10-22 JAVA全栈CMS系统Vue无限级分类拖拽增改查批量删除7
- 2024-10-22 「LeetCode」删除字符串中的所有相邻重复项Java题解
- 2024-10-22 sed命令之删除匹配行的详细介绍(sed命令删除指定内容范围)
- 2024-10-22 # Redis 入门到精通(七)-- redis 删除策略
- 2024-10-22 【Java面试题】List如何一边遍历,一边删除?
- 2024-10-22 Redis03——Redis是如何删除你的数据的
- 2024-10-22 java 如何破坏双亲委派模型,卸载类?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)