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设置程序等待时间

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

python excel行数计算不对_数十万数据Excel数据不好处理怎么办?几行Python搞定

电商行业,每月有上百万条订单发货数据需要与仓库的数据进行核对计算,涉及到数据计算,筛选,匹配等步骤,用excel表超级卡,并且经常卡死。这时如果你会Python,十几行代码就可以搞定。这里需要两个P…

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

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

mysql 增大数据库链接_怎么增大MYSQL数据库连接数

怎么增大MYSQL数据库连接数怎么增大MySQL数据库连接数,MYSQL数据库安装完成后,默认连接数是100,流量稍微大一点的论坛或网站这个连接数是不够哟用的,那么怎么才能增加默认MYSQL连接数呢?这里给大家介绍一下具体的方法与…

python中idx是什么意思_Python pandas.DataFrame.idxmax函数方法的使用

DataFrame.idxmax(self, axis0, skipnaTrue) [source] 返回在请求轴上第一次出现最大值的索引。不包括NA/null。 参数:axis : {0或index,1或columns},默认0 行为0或index,列为1或columns skipna : boolean&…

python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...

已知一个元素,在一个list中找出相似的元素 使用场景: 已知一个其它来源的字符串, 它有可能是不完全与我数据库中相应的字符串匹配的,因此,我需要将其转为适合我数据库中的字符串 使用场景太绕了, 直接举例来说吧 随便举例: 按青岛城市的城区来说, 我数据库中存储的城区是个list…

hive 2.3 mysql_Note23:Hive-2.3.6安装配置

安装包下载安装把安装包上传到 /opt/software 目录解压[kevinhadoop112 software]$ tar -zxvf apache-hive-2.3.6-bin.tar.gz -C /opt/module/改名[kevinhadoop112 module]$ mv apache-hive-2.3.6-bin/ hive-2.3.6配置修改conf 目录下的 hive-env.sh.template 名称为 hive-env.…

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

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…

mysql数值类型占用字节及范围_mysql数据类型及占用字节数【mysql】

一、数值类型1,int 类型 4字节 。备注:一个字节8位,即有32位,存在一个符号位。所以能存的数值大小为-2的31次方到2的31次方;2,tinyint 类型 1字节。3,smallint 类型 2字节4,medi…

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

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

有必要考国二mysql_计算机二级必须要考吗

计算机二级必须要考吗计算机二级考试是全国计算机等级考试四个等级中的一个等级,由教育部考试中心主办,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。接下来由小编为大家整理出计算机二级必须要考吗,希望能够…

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

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

java 反射获取对象_使用Java反射机制获取对象

本文由广州疯狂软件教育java培训分享:构造接口Person,所有Person都会问好,但具体讲什么语言就不知道了!package interf;public interface Person {public void sayHello();}构造一个Person的实现类American,问好的时候…

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线不够长,还得抱电脑主机到电视机旁边,非常不方便。随着技术的发展,现在已经有「串流」功能,只要电视机和电…

java框架谁搭建_从零开始搭建一个开发框架(Java + Hibernate + Spring + Oracle)

框架使用的系统技术以及数据库如下:技术:Java/Hibernate/Hibernate Annotation/Spring数据库:Oracle 10g整个框架的搭建步骤大致分为以下三步:1、创建数据库相关信息2、配置Hibernate框架(导入包、编写hibernate.cfg.xml配置文件、…

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

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