首页 > 其他分享 >mybatis基于注解的多对多关联操作

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

时间:2023-02-13 15:03:49浏览次数:44  
标签:String 角色 roleId private 关联 moduleCode mybatis 注解 权限


文章目录

  • ​​一、前言​​
  • ​​二、实体类:​​
  • ​​1、角色类RoleInfo​​
  • ​​2、权限类:ModuleInfo​​
  • ​​3、中间表ModuleRole​​
  • ​​三、多对多操作​​
  • ​​1、向中间表插入数据​​
  • ​​2、删除关联表数据​​
  • ​​3、获取角色列表并查明每个角色的权限​​
  • ​​四、数据库表结构​​
  • ​​1、角色表roleInfo​​
  • ​​2、权限表moduleInfo​​
  • ​​3、中间表moduleRole​​

一、前言

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

二、实体类:

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

mybatis基于注解的多对多关联操作_数据库

2、权限表moduleInfo

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

3、中间表moduleRole

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


标签:String,角色,roleId,private,关联,moduleCode,mybatis,注解,权限
From: https://blog.51cto.com/u_15961549/6054142

相关文章

  • 【Spring】Bean装配类注解
     默认注入类型多个同类型Bean注入失败依赖使用目标(@Target)@AutoWired通过type默认首先安装属性名称进行注入结合@Qualifier注解(value属性)设置注入的Bean......
  • Mybatis动态SQL
    动态SQLifchoose(when,otherwise)wheretrimsetforeachif动态SQL通常要做的事情是有条件地包含where子句的一部分。比如:<selectid="findActiveBlogWi......
  • 基于拦截器+mybatis+注解 实现对敏感字段进行加解密
    实现:自定义注解类自定义myabtis拦截器,拦截mybatis,主要涉及三个handler(StatementHandler,ParameterHandler,ResultSetHandler)自定义加解密工具类   ......
  • Mybatis使用注解实现一对多复杂关系映射
    一、问题引入:查询用户信息时,将用户的所有账户也查询出来,使用注解方式实现(一个账户具有多个用户信息,所以形成了用户和账户之间的一对多关系)account表user表:二......
  • Mybatis使用注解实现一对一复杂关系映射及延迟加载
    一、问题引入:在加载账户信息时同时加载该账户的用户信息,根据情况可实现延时加载(注解方式实现)数据库字段如下:user表:account表:二、添加User实体类和Account类us......
  • Mybatis注解开发
    环境搭建单表CRUD操作(代理Dao方式)多表查询操作缓存的配置总结:mybatis的环境搭建第一步:创建maven工程并导入坐标第二步:创建实体类和dao的接口第三步:创建My......
  • mybatis 表与表 关联查询 (一)
     @MapperpublicinterfaceDeptMapper{/***分步查询员工*及员工所对应的部门*分步查询第二步:*通过部门查询员工所对应的部门......
  • 引入切面注解@Aspect依赖
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><scope>test</scope>......
  • 五.注解配置SpringMVC
    使用配置类和注解代替web.xml和SpringMVC配置文件的功能1、创建初始化类,代替web.xml在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerlnitialize......
  • 用注解实现AOP
    一、@Aspect:切面类@Before:前置@Around:环绕@AfterRetuming:后置@AfterThrowing:异常@After:最终@Pointcut:连接点,标注在一个无返、无参、二、加载<context:component-scanbase-p......