搭建项目
创建项目
创建一个springboot项目,我数据库框架用的是mybatisPlus,下面是所用的依赖
引入依赖
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--springMVC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springBoot起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- MyBatisPlus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.0</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- spring security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
编写启动类
编写实体类
用户实体类
/**
* 管理员
*/
@Data
public class Admin {
@TableId
private Integer aid;
private String username;
private String password;
private String phoneNum;
private String email;
private boolean status; // 状态 true可用 false禁用
@TableField(exist = false) // 不是数据库的字段
private List<Role> roles; // 角色集合
}
角色实体类
/**
* 角色
*/
@Data
public class Role {
@TableId
private Integer rid;
private String roleName; // 角色名
private String roleDesc; // 角色介绍
@TableField(exist = false) // 不是数据库的字段
private List<Permission> permissions;// 权限集合
}
权限实体类
/**
* 权限
*/
@Data
public class Permission {
@TableId
private Integer pid;
private String permissionName; // 权限名
private String permissionDesc;//权限详情
}
编写mapper层接口
结构目录
创建一个mapper包里面放mapper接口,并在resources面创建一个和mapper同路径的包放.xml文件,如下
AdminMapper用户接口层
AdminMapper接口
public interface AdminMapper extends BaseMapper<Admin> {
//查询用户详情
Admin findDesc(Integer aid);
//删除admin_role对应数据
void deleteAdminAllRoles(Integer aid);
//给用户添加角色
void addAdminRole(@Param("aid") Integer aid, @Param("rid") Integer rid);
//根据用户名查询权限
List<Permission> findAllPermission(String username);
}
AdminMapper的映射文件adminMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="fz.mapper.AdminMapper">
<resultMap id="adminMap" type="fz.pojo.Admin">
<id property="aid" column="aid"></id>
<result property="username" column="username"></result>
<collection property="roles" column="aid" ofType="fz.pojo.Role">
<result property="roleName" column="roleName"></result>
<result property="roleDesc" column="roleDesc"></result>
<collection property="permissions" column="rid" ofType="fz.pojo.Permission">
<result property="permissionName" column="permissionName"></result>
<result property="permissionDesc" column="permissionDesc"></result>
</collection>
</collection>
</resultMap>
<select id="findDesc" parameterType="int" resultMap="adminMap">
SELECT *
FROM admin
LEFT JOIN admin_role
ON admin.aid = admin_role.aid
LEFT JOIN role
ON admin_role.rid = role.rid
LEFT JOIN role_permission
ON role.rid = role_permission.rid
LEFT JOIN permission
ON role_permission.pid = permission.pid
WHERE admin.aid = #{aid}
</select>
<delete id="deleteAdminAllRoles" parameterType="int">
delete from admin_role where aid=#{aid}
</delete>
<insert id="addAdminRole">
insert into admin_role values (#{aid},#{rid})
</insert>
<select id="findAllPermission" resultType="fz.pojo.Permission" parameterType="string">
SELECT DISTINCT permission.*
FROM admin
LEFT JOIN admin_role
ON admin.aid = admin_role.aid
LEFT JOIN role
ON admin_role.rid = role.rid
LEFT JOIN role_permission
ON role.rid = role_permission.rid
LEFT JOIN permission
ON role_permission.pid = permission.pid
WHERE admin.username = #{username}
AND permission.pid is not null
</select>
</mapper>
Rolemapper角色接口层
public interface RoleMapper extends BaseMapper<Role> {
//查询用户的角色
List<Integer> findAllRoleIdsByAdmin(Integer aid);
//删除admin_role中与该角色有关的信息
void deleteRoleAllAdmin(Integer rid);
//删除role_permission中与该角色有关的信息
void deleteRoleAllPermissions(Integer rid);
//给角色添加权限
void addRolePermission(@Param("rid") Integer rid, @Param("pid") Integer pid);
}
Rolemapper的映射文件Rolemapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="fz.mapper.RoleMapper">
<select id="findAllRoleIdsByAdmin" parameterType="int" resultType="int">
select rid from admin_role where aid=#{aid}
</select>
<delete id="deleteRoleAllPermissions" parameterType="int">
delete from role_permission where rid=#{rid}
</delete>
<delete id="deleteRoleAllAdmin" parameterType="int">
delete from admin_role where rid=#{rid}
</delete>
<insert id="addRolePermission">
insert into role_permission values (#{rid},#{pid})
</insert>
</mapper>
PermissionMapper
public interface PermissionMapper extends BaseMapper<Permission> {
// 删除角色_权限表中的相关数据
void deletePermissionAllRole(Integer pid);
//查询用户拥有所有权限的id(通过role_permission表)
List<Integer> findAllPermissionIdsByRole(Integer rid);
}
PermissionMapper的映射文件PermissionMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="fz.mapper.PermissionMapper">
<select id="findAllPermissionIdsByRole" parameterType="int" resultType="int">
select pid from role_permission where rid=#{rid}
</select>
<delete id="deletePermissionAllRole" parameterType="int">
DELETE
FROM role_permission
WHERE pid = #{pid}
</delete>
</mapper>