一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?

简介: 一般情况下,对表格中的数据进行“增删改”操作,都是直接操作数据库。现在有些项目因为设计或者优化的缘故,不对表格中的数据进行“增删改”,而是通过最后“保存”按钮的操作,一次性将数据传至服务器,由服务器对数据进行“增删改”。 以下通过给用户分配角色这样的功能进行说明。

一般情况下,对表格中的数据进行“增删改”操作,都是直接操作数据库。现在有些项目因为设计或者优化的缘故,不对表格中的数据进行“增删改”,而是通过最后“保存”按钮的操作,一次性将数据传至服务器,由服务器对数据进行“增删改”。

以下通过给用户分配角色这样的功能进行说明。

操作界面大致如下(直接手画,略显粗糙,能看明白就行):

序号 用户 角色
1 用户A 角色A
2 用户A 角色B
3 用户A 角色C
删除 新增 保存

说明:

  • “新增”、“修改”和“删除”都不是直接操作数据库。
  • 点击“保存”时才将数据传给服务器。
  • 此项目中的删除均为逻辑删除(即,只是对数据打上“删除”状态的标记),不是物理删除。
  • 文中说的“ID”为用户角色的主键。

第一种方法:先删后增

  • 直接删除用户下的所有角色,将前端传过来的数据统一新增。
优缺点:
  • 优点:逻辑简单,容易实现。
  • 缺点:会产生大量的删除数据。

第二种方法:通过有无 ID 进行操作判断

  1. 过滤数据:通过 stream 过滤出无 ID 的数据和有 ID 的数据。
  2. 新增:无 ID 的数据均为新增的数据,在服务器中直接对这些数据进行新增操作即可。
  3. 修改和删除:查询出用户所有的角色,将查询出来的ID(ID_A)与前端传过来的有ID的数据(ID_B)进行比对,交集(即 ID_A 与 ID_B都有的数据)即为修改,差集(即 ID_A 有的数据,在 ID_B 中没有)即为删除。
优缺点:
  • 优点:影响的数据量较少
  • 缺点:实现起来比较复杂

第三种方法:前端部分分类

  1. 前端分类:前端将被逻辑删除的数据保存在 delete 对象中。
  2. 数据上传:将表格中的数据(包含有新增的数据和修改的数据)和 delete 对象中的数据一起上传至服务器。
  3. 后端分类:将表格中的数据分为有 ID 的数据和无 ID 的数据。
  4. 增删改操作:无 ID 的数据进行新增,有 ID 的数据进行修改,delete 对象中的数据进行删除。
优缺点:
  • 优点:影响的数据量较少,前端的分类操作比较容易,后端的分类操作和增删改操作也比较容易。
  • 缺点:后端仍需要进行分类操作。

第四种方法:前端全分类

  1. 前端分类:前端将需要进行新增、修改和删除的数据分别放到 add 对象、update 对象 和 delete 对象中。
  2. 数据上传:将分类之后的数据上传至服务器。
  3. 后端增删改操作:对 add 对象中的数据进行新增,对 update 对象中的数据进行修改,对 delete 对象中的数据进行删除。
优缺点:
  • 优点:影响的数据量较少,后端容易实现。
  • 缺点:前端实现较难。
相关文章
|
安全 Java API
原子类型AtomicLong用法探究
AtomicLong 是 Java 提供的一个原子长整型类,提供了对长整型数据的原子性操作。在多线程环境下,AtomicLong 可以确保对长整型数据的操作是线程安全的。
591 0
|
SQL 关系型数据库 PostgreSQL
PostgreSQL datediff 日期间隔(单位转换)兼容SQL用法
标签 PostgreSQL , datediff 背景 使用datediff,对时间或日期相减,得到的间隔,转换为目标单位(日、月、季度、年、小时、秒。。。等)的数值。 DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} ) 周...
16485 0
|
开发框架 中间件 Java
如何处理跨域资源共享(CORS)的 OPTIONS 请求?
处理 CORS 的 OPTIONS 请求的关键是正确设置响应头,以告知浏览器是否允许跨域请求以及允许的具体条件。根据所使用的服务器端技术和框架,可以选择相应的方法来实现对 OPTIONS 请求的处理,从而确保跨域资源共享的正常进行。
648 61
|
8月前
|
缓存 数据中心 网络架构
5个减少网络延迟的简单方法
高速互联网对工作与娱乐至关重要,延迟和断线会严重影响效率和体验。本文探讨了导致连接缓慢的三个关键因素:吞吐量、带宽和延迟,并提供了减少延迟的实用方法。包括重启设备、关闭占用带宽的程序、使用有线连接、优化数据中心位置以及添加内容分发网络 (CDN) 等策略。虽然完全消除延迟不可能,但通过这些方法可显著改善网络性能。
1998 7
|
弹性计算 编解码 大数据
小鹏汽车核心业务迁移至阿里云倚天实例,节省20%算力成本
9月20日,在2024云栖大会上,小鹏汽车宣布车联网、官网、商城、大数据等核心业务已迁移至阿里云倚天实例,节省了超过20%的算力成本。
488 14
|
开发框架 .NET 数据库连接
EF Core 在实际开发中,如何分层?
EF Core 在实际开发中,如何分层?
168 0
|
存储 Java 编译器
【Java异常】Variable used in lambda expression should be final or effectively final
【Java异常】Variable used in lambda expression should be final or effectively final
556 0
【Java异常】Variable used in lambda expression should be final or effectively final
|
Java 大数据 编译器
Java基础知识之 throws和throw:声明和抛出异常
你好看官,里面请!今天笔者讲的是Java基础知识之 throws和throw:声明和抛出异常。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
722 1
Java基础知识之 throws和throw:声明和抛出异常
|
存储 监控 数据库
什么是聚集索引和非聚集索引?
【8月更文挑战第3天】
8304 6
|
Python
ArcGIS中ArcMap模型构建器ModelBuilder的模型建立与运行操作方法
ArcGIS中ArcMap模型构建器ModelBuilder的模型建立与运行操作方法
362 1