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

场景

业务中经常会用到一对多的数据库的设计与数据的增删改查的实现。

比如要实现一个对手机应用配置允许访问的权限的业务。

app与权限就是一对多的关系。即一个app可以拥有多个权限。

注:

实现

首先设计数据库。要有一个app表、一个权限表、一个app与权限关联表。

首先设计app表

df4580ad9f83fb128ef2f0587aadc495.png

13494363.html

这里是存储的APP对象的一些属性,即一对多中一的那端。

然后创建权限表

7fa0b0220994c225a35549b18bbd34b5.png

这里是存储权限实体的一些属性,即一对多中多的那一方。

以上两个表的id都是主键并且是非空自增的。

cda6506dff82252a12861691cf478a21.png

然后还需要创建一个关联表实现这种一对多的映射关系。

d0d1706b9fd45574b1043666622a4a8a.png

这里使用的是主表的app编码用来跟从表的id进行关联。

为什么不用主表的id和从表的id进行关联,因为在执行插入时,主表的app编码是有点的,但是id设置是自增的,还没有值,

所以用主表的编码和从表的id进行关联。

比如app表中的数据有

dfba79e7f512c7ea26c1185a387ba1b8.png

13494363.html

权限表中的数据

581f8c0e88adcd33fde0352c7fbd161a.png

那么映射表中的数据

4b609465ae77b3c1719ff4511bfef3cf.png

以上映射表代表编码为weixin的app对应id为1的权限,编码为qq的app对应id为1和2的权限。

数据库设计好之后就是对应的实体类以及相关的代码这里使用代码生成工具将主表app表和从表权限表以及之间的关联表生成实体类和相关代码。

主表app表实体

public classYckzAppgl

{private static final long serialVersionUID = 1L;/** id*/

privateLong id;/** 应用编码*/

privateString appcode;/** 应用名称*/

privateString appname;/** 数据存储路径*/

privateString sjcclj;/** 应用包名*/

privateString appbm;/**

* 创建时间*/

privateDate cjsj;/**

* 权限列表*/

private ListqxList;public ListgetQxList() {returnqxList;

}public void setQxList(ListqxList) {this.qxList =qxList;

}public intgetOffset() {returnoffset;

}public void setOffset(intoffset) {this.offset =offset;

}public intgetPageNum() {returnpageNum;

}public void setPageNum(intpageNum) {this.pageNum =pageNum;

}public intgetPageSize() {returnpageSize;

}public void setPageSize(intpageSize) {this.pageSize =pageSize;

}publicDate getCjsj() {returncjsj;

}public voidsetCjsj(Date cjsj) {this.cjsj =cjsj;

}public voidsetId(Long id)

{this.id =id;

}publicLong getId()

{returnid;

}public voidsetAppcode(String appcode)

{this.appcode =appcode;

}publicString getAppcode()

{returnappcode;

}public voidsetAppname(String appname)

{this.appname =appname;

}publicString getAppname()

{returnappname;

}public voidsetSjcclj(String sjcclj)

{this.sjcclj =sjcclj;

}publicString getSjcclj()

{returnsjcclj;

}public voidsetAppbm(String appbm)

{this.appbm =appbm;

}publicString getAppbm()

{returnappbm;

}

@OverridepublicString toString() {return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

.append("id", getId())

.append("appcode", getAppcode())

.append("appname", getAppname())

.append("sjcclj", getSjcclj())

.append("appbm", getAppbm())

.toString();

}

}

这里除了用代码生成工具生成的基本属性外,还要添加一个从表权限的List

private List qxList;

这样在进行查询主表数据时能将从表的权限数据进行存储。

从表的实体类

public classYckzQuanxian extends BaseEntity

{private static final long serialVersionUID = 1L;/** id*/

privateLong id;/** 权限编码*/

privateString qxcode;/** 权限名称*/

privateString qxname;/** 权限包名*/

privateString qxbm;//是否勾选

privateBoolean sfgx;publicBoolean getSfgx() {returnsfgx;

}public voidsetSfgx(Boolean sfgx) {this.sfgx =sfgx;

}public voidsetId(Long id)

{this.id =id;

}publicLong getId()

{returnid;

}public voidsetQxcode(String qxcode)

{this.qxcode =qxcode;

}publicString getQxcode()

{returnqxcode;

}public voidsetQxname(String qxname)

{this.qxname =qxname;

}publicString getQxname()

{returnqxname;

}public voidsetQxbm(String qxbm)

{this.qxbm =qxbm;

}publicString getQxbm()

{returnqxbm;

}

@OverridepublicString toString() {return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

.append("id", getId())

.append("qxcode", getQxcode())

.append("qxname", getQxname())

.append("qxbm", getQxbm())

.toString();

}

}

然后对这两个表分别使用代码生成工具生成Controller、Service、ServiceImpl、Mapper等相关代码。

然后在主表对应的Controller中,分别引入主表从表和关联表对应的Service接口层。

@AutowiredprivateIYckzAppglService yckzAppglService;

@AutowiredprivateIYckzQuanxianService yckzQuanxianService;

@Autowiredprivate IYckzAppglQxService yckzAppglQxService;

然后在主表中需要进行关联查询时,即又需要主表应用数据,又需要从表权限数据时

publicYckzAppgl confirmpeizhiquanxian(@RequestBody YckzAppgl yckzAppgl)

{//获取id

Long id =yckzAppgl.getId();//根据id获取编码

String appcode =yckzAppglService.selectYckzAppglById(id).getAppcode();//根据编码获取从表数据

List quanxianList =yckzAppglQxService.selectYckzAppglQxByCode(appcode);

YckzAppgl yckzAppglResult= newYckzAppgl ();

yckzAppglResult .setQxList(quanxianList );returnyckzAppglResult ;

}

首先根据传递的主表的id查询出主表的数据,获取主表的编码后去根据编码去关联表中获取权限表的id。

然后根据id去权限表中查询出权限的信息,将其赋值给主表的list。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python设置时间到后结束程序_Python设置程序等待时间

写代码时,特别是涉及到其他外部可执行文件调用时,通常会出现调用程序还未生成结果,后面的程序就自动执行的情况。而通常情况下,前一步调用的生成结果是下一步程序的输入文件,因此出现找不到该文件或打不开该文件的情况…

c++心形代码_情人节,用代码比个心

今日份的情人节,在家闲出p的你,是不是比往日更加寂寞?这无情的雨,这冰冷的雪,这朴实无华且枯燥的生活,你是否想做点什么?没有朱一旦的劳力士,也没有朱一龙的神仙颜值,那么…

上下相机贴合对位计算公式_展商速递 | 汇驰新材热可塑性光学透明膜优化升级全贴合工艺...

2020/11/19-21广州汇驰新材料有限公司(东莞欧伏电子)展位号:1R10展会时间:11月19-21日地点:深圳会展中心(福田区老展馆)欢迎相关企业莅临商谈!关于汇驰新材广州汇驰新材料有限公司(东莞欧伏电子)(展位号:1R10)主要从事…

datagrip替换字_DataGrip使用进阶-导航及搜索(一)

1、关键字导航:当在datagrip的文本编辑区域编写sql时,按住键盘Ctrl键不放,同时鼠标移动到sql关键字上,比如表名、字段名称、或者是函数名上,鼠标会变成手型,关键字会变蓝,并加了下划线&#xff…

js map获取_感知 Node.js 异步I/O 的魅力!

JS 在浏览器的网页中执行,浏览器给 JS 提供的能力是操作文字、图片,或实现一些简单效果。术语叫 DOM 操作。JS 在 Node.js 环境中执行, Node 给 JS 提供了诸如 文件操作, 网络操作 等功能模块。基于这些模块,JS 一下就牛气冲天了。在 Node.j…

k8s pod restartcount 改0_通过实例快速掌握k8s(Kubernetes)核心概念

点击上方蓝色“Go语言中文网”关注我们,设个星标,每天学习 Go 语言本文作者:倚天码农,原创授权发布原文链接:https://segmentfault.com/a/1190000020595811容器技术是微服务技术的核心技术之一,并随着微服务…

div垂直居中的方法_【CSS】8种常见的垂直水平居中方法

1.比较传统的方式 absolutemargin负值偏移特点:父容器要设置宽高,需要知道子容器宽高,偏移量是子容器宽高的一半且是负值,兼容性好/* absolutemargin负值偏移布局 */.layout.absolute {position: relative;}.layout.absolute art…

websocket 导致大量apache进程_Swoole 服务端主动向websocket推送消息

在之前的博文中,我们已经学完了如果使用swoole搭建websocket长连接,也学会了swoole的多进程数据共享操作。但在一个完整的websocket长连接日常操作链中,服务端往往会主动给在线的用户单独推送消息,会群发一些消息。在Swoole-webso…

python因子分析法_python——因子分析

因子分析用Python做的一个典型例子 一、实验目的 采用合适的数据分析方法对下面的题进行解答二、实验要求 采用因子分析方法,根据48位应聘者的15项指标得分,选出6名最优秀的应聘者。 三、代码 importpandas aspd importnumpy asnp importmath asmath imp…

polycom安卓手机客户端_三款免费「游戏串流」APP,在手机/电视上玩PC游戏

以前想把电脑游戏输出到电视机上玩,得用HDMI线输出,如果电脑主机和电视机离太远,HDMI线不够长,还得抱电脑主机到电视机旁边,非常不方便。随着技术的发展,现在已经有「串流」功能,只要电视机和电…

python获取返回值_python如何获取函数的返回值

函数需要先定义后调用,函数体中 return 语句的结果就是返回值。如果一个函数没有 reutrn 语句,其实它有一个隐含的 return 语句,返回值是 None,类型也是 NoneType。return 语句的作用:结束函数调用、返回值 指定返回值…

java模拟器百度_Java模拟实现百度文档在线浏览

这个思路是我参考网上而来,代码是我实现。采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览。ok,A、下载OpenOffice (转换资源文件)B、下载JodConverter(调用OpenOffice)C、下载Sw…

body click js 委托_JS 事件循环

进程 线程CPU 分配资源的最小单位是进程,同一个时间内单个 CPU 只能运行一个进程,单个 CPU 一次只能运行一个任务CPU 调度的最小单位是线程,一个进程里面包含多个线程。可以看看阮老师的这篇文章,进程与线程的一个简单解释浏览器的…

django jsonresponse_利用 Django 动态展示 Pyecharts 图表数据的几种方法

本文将介绍如何在 web 框架 Django 中使用可视化工具 Pyecharts, 看完本教程你将掌握几种动态展示可视化数据的方法!Django 模板渲染1. 新建一个 Django 项目命令行中输入以下命令django-admin startproject pyecharts_django_demo创建一个应用程序python manage.py startapp d…

python网页登录验证码不显示_进网页需要验证码?不好意思,Python从来不惧各种验证码!...

今天要来说说滑动验证码了大家应该都很熟悉点击滑块然后移动到图片缺口进行验证现在越来越多的网站使用这样的验证方式为的是增加验证码识别的难度那么,对于这种验证码应该怎么破呢接下来就是见证神奇的时刻打开 b 站的登录页面可以看到登录的时候需要进行滑块验证按…

怎么调用新建模型里文章的内容_优雅地进行Tensorflow Lite模型转换

初涉知乎江湖,知道大佬很多,请温柔以待!!!七日凌晨,谷歌连夜发布了有关于Tensorflow最新成果和技术,这应该是贾扬清离开脸书后另一个深度学习界令人惊呼的事件了吧!(旁白…

git add后取消_Git常用命令-总结

创建git用户$ git config --global user.name "Your Name"$ git config --global user.email "emailexample.com"初始化一个Git仓库,使用git init命令。添加文件到Git仓库,分两步:使用命令git add ,注意&…

查看csv编码_[小O地图-数据] - 坐标转地址文字(逆地理编码)

小O地图是一款基于互联网地图进行地理数据处理、分析、图表的软件。致力为广大科研人员提供专业地图数据,用于科研及学习。小O地图提供将【经纬度坐标转换为地址】的功能,例如:将“116.359861, 39.917225” 转换为 “北京市西城区…

python自动化办公源码_python自动化办公:文件篇(自动整理文件,一键完成)

import os list_all[]#初始化一个空列表 for root ,dirs,files in os.walk(rC:UsersShineionDesktop新建文件夹): for name in files: file_pathos.path.join(root,name)#包含路径的文件 file_nameos.path.split(file_path)[-1] list_all.append(file_name) print(list_all)如果…

ocr中文数据集_CNOCR:测试集准确率最高98%,自带识别模型的中文OCR包

今天 Gitee 为大家介绍的是一款中文 OCR 包。大家都知道,训练模型是一件非常费时费力的事情,但今天这款项目已经自带训练好的识别模型,我们只需要下载下来使用即可,可以说是非常方便了,那么下面我们就去看看这个项目的…