通过若依源码分析多对多的实现过程

一. 引言

多对多的关系是一种很常见的实体间的关系。

除了多对多,还有一对多,多对一,一对一。

常见的有一对多和多对多,本文我就通过开源项目若依系统研究一下前端后端的多对多的实现方式,帮助那些还不太懂的代码如何编写的人,提供一种宝贵的借鉴思路。

代码使用的是若依的前端分离版本。项目地址:https://gitee.com/y_project/RuoYi-Vue

具体代码将展示用户和角色的实现方式。

二. 前端页面展示效果

  1. 用户新增可以选择角色信息,目前有两个,测试用户和普通用户。

在这里插入图片描述

  1. 用户编辑也可以修改原有的角色信息。
    在这里插入图片描述

三. 数据库实现思路

  1. user表
    主键user_id在这里插入图片描述
  2. role表
    主键role_id
    在这里插入图片描述
  3. user_role表(中间表,多对多的表)
    联合主键user_id和role_id
    在这里插入图片描述

四. 新增-后端实现思路

  1. 查看前端调用url
    新增url http://localhost/dev-api/system/user/
    在这里插入图片描述

  2. controller层接收映射

新增映射为"/"
修改映射为"/{userId}"

注意:最新版本的若依已经对role加了一层判断过滤,加入isAdmin的判断。如果是admin查出所有角色,不是admin对role做了一层过滤。

1)AjaxResult.DATA_TAG是返回结果集合的外层,存入的是根据用户Id查询的user数据。
2)AjaxResult.success()返回集合中msg:“操作成功”,code:200
3)只看role数据,外层有一个roles的集合,所有role的数据集合,根据是否admin做数据筛选。
4)如果映射中有回传userId的话,外层会有一层rolesIds数据集合,存放根据userId查询roles数据集合。

/**
 * 根据用户编号获取详细信息
 */
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping(value = {
    "/", "/{userId}" })
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
{
   
    AjaxResult ajax = AjaxResult.success();
    List<SysRole> roles = roleService.selectRoleAll();
    ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
    ajax.put("posts", postService.selectPostAll());
    if (StringUtils.isNotNull(userId))
    {
   
        ajax.put(AjaxResult.DATA_TAG, userService.selectUserById(userId));
        ajax.put("postIds", postService.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值