javascript
SpringBoot+MySql实现一对多再多对多的数据库的设计以及业务层增删改查的实现
場景
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实现一对多再多对多的数据库的设计以及业务层增删改查的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot+MySql+Ele
- 下一篇: ElementUI中el-table双击