首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mybatis基于注解的多对多关联操作

mybatis基于注解的多对多关联操作

作者头像
别团等shy哥发育
发布2023-02-25 17:03:23
发布2023-02-25 17:03:23
49100
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、前言

一名角色对应多种权限,一种权限也会被多个角色同时拥有,所以角色表和权限表是多对多关系,这时需要引入中间表(角色-权限表)来映射,角色表与中间表和权限表与中间表都是一对多关系。

二、实体类:

1、角色类RoleInfo

省略get和set方法

代码语言:javascript
代码运行次数:0
运行
复制
package com.ssm.pojo;

import java.util.List;

public class RoleInfo { //角色信息
    private int roleId;             //角色编号
    private String roleType;        //角色类型
    private String rolePermission;  //角色权限
    private String roleRemark;      //备注
    private List<UserInfo> userInfos;
    //模块
    private List<ModuleInfo> moduleInfoList;
	
}

2、权限类:ModuleInfo

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * 模板
 */
package com.ssm.pojo;

import java.util.ArrayList;
import java.util.List;

public class ModuleInfo {
	/**模板编码*/
	private String moduleCode;  
	/**模板名称*/
	private String moduleName;	
	/**模板路径*/
	private String modulePath;	
	/**父级模板编号*/
	private String parentCode;	
	/**是否为叶子节点*/
	private int isLeaf;			
	/**同级排序编号*/
	private int sortNumber;

	//角色
	List<RoleInfo> roleInfoList;

}

3、中间表ModuleRole

代码语言:javascript
代码运行次数:0
运行
复制
//角色和权限的关联表
public class ModuleRole {
    private int id;         //序号
    private int roleId;     //角色编号
    private String moduleCode;//模块编号
   }

三、多对多操作

1、向中间表插入数据

代码语言:javascript
代码运行次数:0
运行
复制
//向关联表插入数据
    @Insert("<script>" +
            "insert into moduleRole(roleId,moduleCode)" +
            "select r.roleId,m.moduleCode from roleInfo r,moduleInfo m" +
            "<where>" +
            "r.roleId=#{roleInfo.roleId} and m.moduleCode in" +
            "<foreach collection='moduleCodeList' item='moduleCode' index='index' open='(' separator=',' close=')'>" +
            "#{moduleCode}" +
            "</foreach>" +
            "</where>" +
            "</script>"
    )
    Integer addModuleRole(@Param("roleInfo") RoleInfo roleInfo,@Param("moduleCodeList") String[] moduleCodeList);

2、删除关联表数据

代码语言:javascript
代码运行次数:0
运行
复制
//根据角色编号删除关联表数据
    @Delete("delete from moduleRole where roleId=#{roleId}")
    Integer deleteModuleRole(RoleInfo roleInfo);

3、获取角色列表并查明每个角色的权限

代码语言:javascript
代码运行次数:0
运行
复制
//获取满足条件的角色列表
    @Results({
            @Result(id = true,column = "roleId",property = "roleId"),
            @Result(column = "roleType",property = "roleType"),
            @Result(column = "rolePermission",property = "rolePermission"),
            @Result(column = "roleRemark",property = "roleRemark"),
            @Result(column = "roleId",property = "moduleInfoList",
                    many = @Many(select ="com.ssm.dao.ModuleInfoDao.findModuleByRoleId"))
    })
    @Select("select * from roleInfo")
    List<RoleInfo> list();
代码语言:javascript
代码运行次数:0
运行
复制
//根据角色编号查询角色可操作菜单
    @Select("select * from moduleInfo f where moduleCode in(select moduleCode from moduleRole where roleId=#{roleId})")
    List<ModuleInfo> findModuleByRoleId(Integer roleId);

四、数据库表结构

1、角色表roleInfo

2、权限表moduleInfo

3、中间表moduleRole

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、前言
  • 二、实体类:
    • 1、角色类RoleInfo
    • 2、权限类:ModuleInfo
    • 3、中间表ModuleRole
  • 三、多对多操作
    • 1、向中间表插入数据
    • 2、删除关联表数据
    • 3、获取角色列表并查明每个角色的权限
  • 四、数据库表结构
    • 1、角色表roleInfo
    • 2、权限表moduleInfo
    • 3、中间表moduleRole
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档