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

举报
别团等shy哥发育 发表于 2023/02/05 16:57:26 2023/02/05
【摘要】 @[toc] 一、前言一名角色对应多种权限,一种权限也会被多个角色同时拥有,所以角色表和权限表是多对多关系,这时需要引入中间表(角色-权限表)来映射,角色表与中间表和权限表与中间表都是一对多关系。 二、实体类: 1、角色类RoleInfo省略get和set方法package com.ssm.pojo;import java.util.List;public class RoleInfo { ...

@[toc]

一、前言

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

二、实体类:

1、角色类RoleInfo

省略get和set方法

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

/**
 * 模板
 */
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

//角色和权限的关联表
public class ModuleRole {
    private int id;         //序号
    private int roleId;     //角色编号
    private String moduleCode;//模块编号
   }

三、多对多操作

1、向中间表插入数据

//向关联表插入数据
    @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、删除关联表数据

//根据角色编号删除关联表数据
    @Delete("delete from moduleRole where roleId=#{roleId}")
    Integer deleteModuleRole(RoleInfo roleInfo);

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

//获取满足条件的角色列表
    @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();
//根据角色编号查询角色可操作菜单
    @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

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。