mybatis基于注解的多对多关联操作
原创
©著作权归作者所有:来自51CTO博客作者别团等shy哥发育的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
- 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
2、权限表moduleInfo
3、中间表moduleRole