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

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

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

给用户分配角色

说明:

  • “新增”、“修改”和“删除”都不是直接操作数据库。
  • 点击“保存”时才将数据传给服务器。
  • 此项目中的删除均为逻辑删除(即,只是对数据打上“删除”状态的标记),不是物理删除。
  • 文中说的“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 对象中的数据进行删除。

优缺点:

  • 优点:影响的数据量较少,后端容易实现。
  • 缺点:前端实现较难。

shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...相关推荐

  1. python单链表操作_单链表的创建、增删改查等操作(Python实现)

    单链表的创建.增删改查等操作(Python实现) # 单链表 class Node: def __init__(self, elem): self.elem = elem self.next = No ...

  2. shiro 同时实现url和按钮的拦截_shiro笔记 【四】

    shiro笔记 [三] public class MyIniWebEnvironment extends IniWebEnvironment { @Override protected FilterC ...

  3. python点击按钮改变图片_单击tkinter按钮时更改图片

    点击了python和一些按钮后,会产生一些颜色变化的按钮 当单击按钮时,是否可以更改按钮使用的.gif?我希望它在GPIO引脚关闭时显示ON,在GPIO引脚打开时显示off.在 目前我有:#BCM17 ...

  4. java点击按钮发出声音_响应触发按钮声音onKeyPress问题

    我正在学习React并致力于构建drum machine . 我在按钮点击时使用onKeyPress触发声音时遇到问题 . 使用鼠标单击时按钮和声音工作正常,但为了让它们在键盘上工作,您首先必须用鼠标 ...

  5. html按钮分享功能实现,一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)...

    前几天由于工作需要制作一个分享按钮,考虑到后续其他项目可能也会用到,于是就打算写成插件化,正好也给我自己的插件jquery.hooray增加一个新的功能,为了不浪费大家时间,我先把demo放出来,如果 ...

  6. 小优优(u盘歌曲顺序调整)_电脑从U盘启动,这三种方式你知道吗?

    Windows 可以运行在数千台不同配置的电脑上, 但安装 Windows 10又是另一回事, 具体取决于你的电脑是否安装了现有的 Windows 10,以及早期版本,像是 Windows7, Win ...

  7. springboot增删改查案例_大神基于SpringBoot开发一个Restful服务,实现增删改查功能...

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  8. vs中实现声音录制并保存到指定文件_别人直播怎么录制视频?这三种方法你可以不知道...

    在网络科技发展迅速的今天,直播成为了当前最为火热的娱乐方式.不管您是上班族还是自由职业者,在闲暇时除了打游戏以外,直播或许也是最好的选择了.所以,这之中就会产生一些需求,例如:需要将一些自己喜欢的一些 ...

  9. 怎么删除用户_误删的手机照片怎么恢复?三种快速恢复的方法

    误删的手机照片怎么恢复?手机照片对我们来说不过仅仅是一张照片,它还是我们美好回忆的见证者.但是大多数手机用户都没有备份手机照片的习惯.如果这些珍贵的手机照片被误删了,那么我们该怎么将其恢复呢?不用着急 ...

最新文章

  1. 【ACM】杭电OJ 2020(排序)
  2. PatchmatchNet:一种高效multi-view stereo框架 (CVPR2021 Oral)
  3. macOS Sierra 10.12虚拟机安装
  4. Golang中函数不支持重载
  5. css 列 布局,CSS二列三列布局
  6. http请求post,返回excel文件,并接收
  7. vue骨架屏以及seo优化
  8. 几种常用的视频接口(端子)
  9. excel 2016 英文界面 更换 中文界面
  10. 计算机网络英语词汇,计算机网络英语词汇
  11. html内容转换中文乱码怎么办,HTML中文乱码怎么解决?
  12. 遗传算法(一) 遗传算法的基本原理
  13. 关于几种获取iOS设备UDID典型方式的技术探讨
  14. 健美运动员赛前脱水断碳_健美运动员在备赛期状态真的很差吗?
  15. 404网站服务器错误怎么解决,网站404错误怎么解决?[终极Xenu死链工具]
  16. table表格表头合并单元格问题
  17. svn拉取和提交大概步骤
  18. 看纸箱设备厂家如何定义包装纸箱的
  19. [植树造林小游戏1.1]
  20. 笔试强训day25(数根,星际密码)

热门文章

  1. libcurl多线程下载开发过程中需要注意的一个问题
  2. XPath与多线程爬虫
  3. apt Could not get lock /var/lib/dpkg/lock 解决方案
  4. unity项目build成webgl时选择生成目录(解决方法)
  5. Python笔记:字典的fromkeys方法创建的初始value同内存地址问题
  6. hiho_1139_二分+bfs搜索
  7. jenkins2 multibranch
  8. Javascript中undefined,NaN等特殊比较
  9. c++ stack 的使用
  10. php empty()和isset()的区别