场景

SpringBoot+MySql+ElementUI实现一对多的数据库的设计以及增删改查的实现

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107971394

上面讲了app应用对应权限实现一对多的逻辑。

如果一对多多的那层再是一对多的话要怎样设计。

比如白名单设计,一个白名单可以包含多个手机app,而每个app又对应多个权限。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

首先设计白名单表

主要靠白名单的编码实现与应用的一对多关联。

添加白名单数据

然后设计与白名单一对多的app表

添加几条数据

然后设计权限表

然后添加几条权限表数据

然后怎样将这三个表进行关联,其中用到了两个关联表,首先是白名单与app应用实现一对多的关联

设计关联表

通过白名单的编码与app表的id进行关联

添加几条关联数据

然后是实现应用表与权限表的一对多关联,设计关联表

其实这里的设计可以只实现appid与权限id的关联,这样的话就是用到两个关联表。

或者只用上面这一张关联表实现白名单-应用-权限的关联。

具体根据自己情况选择,这里为了避免数据错乱所以使用了两个关联表并且第二个关联表也设计如上,

添加几条关联表数据

这样关联就代表白名单编号为001的对应app的id为1和2的,而appid为1的又对应权限id为1和2的。

然后使用代码生成工具分别生成以上所有表的相关的代码。

然后在实体类中添加关联关系。

即白名单实体类中添加应用的list,构建出一对多的关系,在应用的实体类中添加权限的list,构建出一对多的关系。

白名单实体

public class YckzBaimingdan
{private static final long serialVersionUID = 1L;/** id */private Long id;/** 白名单编号 */private String bmdbh;/** 白名单名称 */private String bmdname;/** 创建日期 */@JsonFormat(pattern = "yyyy-MM-dd")private Date cjrq;/** 创建人 */private String cjr;/**** 白名单中应用列表*/private List<YckzBaimingdanApp> appList;
}

省略get和set方法

应用实体

public class YckzBaimingdanApp
{private static final long serialVersionUID = 1L;/** id */private Long id;/** 白名单编号 */private String bmdbh;/** app应用id */private Long appid;/**** 名称*/private String name;/**** 包名*/private String packagename;/**** 权限列表*/private List<YckzBaimingdanQuanxian> quanxianList;
}

省略get和set方法

然后在新增白名单的接口方法中

    public AjaxResult add(@RequestBody YckzBaimingdan yckzBaimingdan){//验证白名单编号是否存在int count = yckzBaimingdanService.isExistYckzBaimingdan(yckzBaimingdan.getBmdbh());if(count>0){return AjaxResult.error("该编号已经存在");}else{//插入白名单表yckzBaimingdan.setCjrq(new Date());yckzBaimingdanService.insertYckzBaimingdan(yckzBaimingdan);//插入白名单-应用表//必须有应用列表List<YckzBaimingdanApp> appList = yckzBaimingdan.getAppList();for (YckzBaimingdanApp app:appList) {app.setBmdbh(yckzBaimingdan.getBmdbh());//必须有白名单编号和appidyckzBaimingdanAppService.insertYckzBaimingdanApp(app);//每个应用必须有权限列表List<YckzBaimingdanQuanxian> quanxianList = app.getQuanxianList();for (YckzBaimingdanQuanxian quanxian:quanxianList) {quanxian.setBaimingdanbh(yckzBaimingdan.getBmdbh());quanxian.setAppid(app.getAppid());//插入白名单-权限表yckzBaimingdanQuanxianService.insertYckzBaimingdanQuanxian(quanxian);}}return AjaxResult.success("新增白名单成功");}}

首先验证白名单编号唯一,然后插入到白名单表中数据,然后获取应用表的list,循环插入白名单的

编号和应用的id,应用id是前端通过请求应用表数据获取的id。然后在获取每个应用对应的权限的list

再循环插入白名单-应用-权限的关联表。

这样新增时只是新增一个或者两个关联表。

然后在进行获取白名单的详细信息时

    public AjaxResult getInfo(@PathVariable("id") Long id){//查询出白名单主表YckzBaimingdan baimingdan = yckzBaimingdanService.selectYckzBaimingdanById(id);//查询出应用列表List<YckzBaimingdanApp> appList = yckzBaimingdanAppService.selectYckzBaimingdanAppListByBh(baimingdan.getBmdbh());for (YckzBaimingdanApp app:appList) {List<YckzBaimingdanQuanxian> quanxianList = yckzBaimingdanQuanxianService.selectYckzBaimingdanQuanxianListByBhAndId(baimingdan.getBmdbh(), app.getAppid());app.setQuanxianList(quanxianList);}baimingdan.setAppList(appList);return AjaxResult.success(baimingdan);}

根据id获取白名单表的信息,再根据白名单的编号获取应用的list再循环应用list,根据白名单编号和应用id获取权限的list,再分别将其赋值给对应的主表的list,然后

将白名单主表对象返回。

在实现修改时

    public AjaxResult edit(@RequestBody YckzBaimingdan yckzBaimingdan){//修改白名单-应用表//必须有应用列表List<YckzBaimingdanApp> appList = yckzBaimingdan.getAppList();for (YckzBaimingdanApp app:appList) {//每个应用必须有权限列表List<YckzBaimingdanQuanxian> quanxianList = app.getQuanxianList();for (YckzBaimingdanQuanxian quanxian:quanxianList) {quanxian.setBaimingdanbh(yckzBaimingdan.getBmdbh());quanxian.setAppid(app.getAppid());//修改白名单-权限表yckzBaimingdanQuanxianService.updateYckzBaimingdanQuanxian(quanxian);}app.setBmdbh(yckzBaimingdan.getBmdbh());//必须有白名单编号和appidyckzBaimingdanAppService.updateYckzBaimingdanApp(app);}//修改白名单表yckzBaimingdanService.updateYckzBaimingdan(yckzBaimingdan);return AjaxResult.success("修改白名单成功");}

首先获取白名单下的应用列表然后循环获取每一个下的权限列表,然后在循环中

先修改权限表,循环完之后再修改应用表,再循环接受后修改白名单表。

更新时要采用逆序即从里向外的顺序进行修改,先修改多的那端再修改一的那端。

不然将一的那端修改后找不到对应的多的那端的信息了。

修改的是两个关联表的数据,不用修改应用信息表和权限信息表。

然后在删除时跟修改类似也是逆序的方式

    public AjaxResult remove(@PathVariable Long[] ids){for (Long id:ids) {//查询主表YckzBaimingdan baimingdan = yckzBaimingdanService.selectYckzBaimingdanById(id);//查询出应用列表List<YckzBaimingdanApp> appList1 = yckzBaimingdanAppService.selectYckzBaimingdanAppListByBh(baimingdan.getBmdbh());for (YckzBaimingdanApp app:appList1) {List<YckzBaimingdanQuanxian> quanxianList = yckzBaimingdanQuanxianService.selectYckzBaimingdanQuanxianListByBhAndId(baimingdan.getBmdbh(), app.getAppid());app.setQuanxianList(quanxianList);}baimingdan.setAppList(appList1);//获取应用列表List<YckzBaimingdanApp> appList = baimingdan.getAppList();for (YckzBaimingdanApp app:appList) {//每个应用必须有权限列表List<YckzBaimingdanQuanxian> quanxianList = app.getQuanxianList();for (YckzBaimingdanQuanxian quanxian:quanxianList) {quanxian.setBaimingdanbh(baimingdan.getBmdbh());quanxian.setAppid(app.getAppid());//删除白名单-权限表yckzBaimingdanQuanxianService.deleteYckzBaimingdanQuanxianById(quanxian.getId());}app.setBmdbh(baimingdan.getBmdbh());yckzBaimingdanAppService.deleteYckzBaimingdanAppById(app.getId());}yckzBaimingdanService.deleteYckzBaimingdanById(baimingdan.getId());}return AjaxResult.success("删除白名单成功");}

SpringBoot+MySql实现一对多再多对多的数据库的设计以及业务层增删改查的实现相关推荐

  1. mysql数据库的增删改查命令_MySQL 初识别语句,数据库、表、行的增删改查

    一.MySQL 开场语句 1.登陆 mysql -u root -p ; #回车然后输入密码 2.退出 eixt | quit #二者选其一 3.查看数据文件路径(配置文件中学习的) show glo ...

  2. C语言链接mysql数据库实现简易的学生信息增删改查

    添加学生信息: 查看学生信息: 学生信息删除: 学生信息更新: #define _CRT_SECURE_NO_DEPRECATE  /*   if (!mysql_real_connect(& ...

  3. mysql修改i数据库名_数据库操作之mysqli语句的增删改查0424/14:36

    基本的数据库操作 函数 mysqli_connect()连接数据库 mysqli_errno()错误编码 mysqli_error() 错误信息 mysqli_connect_errno() 数据库上 ...

  4. layui进行分页处理,后端返回数据没有count字段,需要单独获取再添加到数据中,再进行项渲染,另有layui表格数据增删改查前后端交互

    整体效果图如下: (1)分页前端界面处理 (2)分页后端的数据处理 具体代码如下: 前端界面代码:包括分页,增删改查,刷新(搜索功能还没做,后端是java代码) <!DOCTYPE html&g ...

  5. SpringBoot+MySql+ElementUI实现一对多的数据库的设计以及增删改查的实现

    场景 业务中经常会用到一对多的数据库的设计与数据的增删改查的实现. 比如要实现一个对手机应用配置允许访问的权限的业务. app与权限就是一对多的关系.即一个app可以拥有多个权限. 注: 博客: ht ...

  6. mysql一对多增删改查_SpringBoot+MySql+ElementUI实现一对多的数据库的设计以及增删改查的实现...

    场景 业务中经常会用到一对多的数据库的设计与数据的增删改查的实现. 比如要实现一个对手机应用配置允许访问的权限的业务. app与权限就是一对多的关系.即一个app可以拥有多个权限. 注: 实现 首先设 ...

  7. MySQL基本增删改查以及搭配node在项目中的操作

    目录 一.数据库简单介绍 二.进一步了解MySQL 三.安装MySQL并配置 四.使用SQL语句管理数据库 1.SQL语言中的注释 2.SELECT查询语句 3.INSERT INTO插入语句 4.U ...

  8. 《MySQL——增删改查以及常用语法》

    目录 登录和退出MySQL服务器 基本语法(增删改查) 登录和退出MySQL服务器 # 登录MySQL 密码 $ mysql -u root -p12345612 # 退出MySQL数据库服务器 ex ...

  9. Mysql学习笔记(六)增删改查

    原文:Mysql学习笔记(六)增删改查 PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into tab ...

最新文章

  1. python 归一化_只需 45 秒,Python 给故宫画一组手绘图!
  2. 王海峰发布百度智能云最新架构,推出AI中台和知识中台
  3. cli3 px转rem适配移动端_Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
  4. memcached 双主复制
  5. LiveData ViewModel 使用详解
  6. 性能测试TPS与用户之间转换
  7. Iptables Layer7禁止QQ、MSN、p2p软件(解决iptable 无法启动)
  8. 【代码】使用ReentrantLock还可以调用lockInterruptibly方法,可以对线程interrupt方法做出响应
  9. [网络安全自学篇] 四十四.Windows远程桌面服务缺陷(CVE-2019-0708)复现及防御详解
  10. 解决chrome和firefox flash不透明的方法
  11. 电源芯片选择DC/DC还是LDO?《转》
  12. 接口中定义的成员变量是( )。_抽象与接口
  13. Spring中都用到了哪些设计模式?
  14. Intro.js轻松搞定页面引导流程
  15. php 旋转图片 保存,如何在PHP中旋转并保存图像
  16. Microsoft Office无法找到此应用程序的许可证,修复尝试失败或者已被取消
  17. 高通msm8996配置wlan0 Mac地址
  18. [bzoj3694]最短路
  19. ObjectAnimator实现菜单的弹出(扇形)
  20. android 二级联动列表,仿eleme点餐页面

热门文章

  1. SQL进阶教程 | 史上最易懂SQL教程 5小时零基础成长SQL大师
  2. synchronized 和 volatile 关键字的作用
  3. 计算机课程设计结业感言,课程设计感言
  4. java控制台计算数字_java从控制台接收一个数字
  5. 学生用的笔记本电脑什么样的好_大学生用的学生党笔记本什么牌子好,听听学姐的...
  6. 在Qt在GUI程序里显示控制台界面
  7. python分割数字_对python数据切割归并算法的实例讲解
  8. linux链路状态,网卡一配地址,链路状态就down了,求解决方法!
  9. 大师兄科研网vasp_【回顾】第三临床学院2020年新生科研交流会
  10. python中延时函数_python中实现延时回调普通函数示例代码