1. 程式人生 > >mybatis使用者角色許可權一對多關聯查詢

mybatis使用者角色許可權一對多關聯查詢

mybatis一對多關聯查詢案例

  • 1.需求
  • 2.資料庫說明
  • 3.實體說明
  • 4.mybatis SQL語句編寫

一.需求
在做角色許可權管理時,需要根據使用者名稱查詢其對應的所有角色以及擁有的所有許可權

二.資料庫說明
資料庫有如下幾個表

使用者表(users)
id,使用者名稱,真是姓名,密碼,性別,出生日期,描述,建立日期
角色表(roles)
id,角色描述
許可權表(permissions)
id,許可權名稱,許可權資源

除了這三張表外,還要兩張表來將三者關聯起來:

使用者角色關聯表(users_roles)
使用者id、角色id
角色許可權關聯表(roles_permissions)
使用者角色關聯表(users_roles)

這裡寫圖片描述

三.實體說明

1.使用者實體說明
使用者與角色為多對多的關係,則使用者實體中應該包含多個角色,此處用list封裝
public class Users {
    private Integer id;
    private String username;
    private String name;
    private List<Educate> educates; 
    private String password;
    private Byte sex;
    @DateTimeFormat
(pattern = "yyyy-MM-dd")//前段到後臺註解 private Date birthday; private Date createtime; private String content; private List<Roles> rolesList; public List<Educate> getEducates() { return educates; } public void setEducates(List<Educate> educates) { this
.educates = educates; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username == null ? null : username.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public Byte getSex() { return sex; } public void setSex(Byte sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getContent() { return content; } public void setContent(String content) { this.content = content == null ? null : content.trim(); } public List<Roles> getRolesList() { return rolesList; } public void setRolesList(List<Roles> rolesList) { this.rolesList = rolesList; } public void setName(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return "Users [id=" + id + ", username=" + username + ", name=" + name + ", educates=" + educates + ", password=" + password + ", sex=" + sex + ", birthday=" + birthday + ", createtime=" + createtime + ", content=" + content + ", rolesList=" + rolesList + "]"; } }
2.角色實體說明
角色與許可權為多對多的關係,即一個角色對應多個許可權,此處用list屬性進行許可權封裝
public class Roles {
    private Integer id;

    private String description;

    private List<Permissions> permissionsList;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description == null ? null : description.trim();
    }

    public List<Permissions> getPermissionsList() {
        return permissionsList;
    }

    public void setPermissionsList(List<Permissions> permissionsList) {
        this.permissionsList = permissionsList;
    }

    @Override
    public String toString() {
        return "Roles [id=" + id + ", description=" + description + ", permissionsList=" + permissionsList + "]";
    }
}

3.許可權實體說明

public class Permissions {
    private Integer id;

    private String url;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url == null ? null : url.trim();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    @Override
    public String toString() {
        return "Permissions [id=" + id + ", url=" + url + ", name=" + name + "]";
    }

}
  • 四.mybatis SQL語句編寫

在mapper對映檔案中,編寫根據使用者名稱查詢使用者的方法(findUsersByName),將使用者對應的角色以及擁有的許可權封裝

<resultMap id="users" type="Users">
    <result property="id" column="id" />
    <result property="username" column="username" jdbcType="VARCHAR"/>
    <result property="name" column="name" jdbcType="VARCHAR"/>

    <result property="password" column="password" jdbcType="VARCHAR"/>
    <result property="sex" column="sex" jdbcType="VARCHAR"/>
    <result property="birthday" column="birthday" jdbcType="TIMESTAMP"/>
    <result property="createtime" column="createtime" jdbcType="TIMESTAMP" />
  <!--  <result property="isadmin" column="isadmin" jdbcType="VARCHAR"/>-->
    <result property="content" column="content" jdbcType="VARCHAR"/>
</resultMap>
<resultMap type="com.jointem.hrm.entity.Roles" id="RoleMap">
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="description" property="description" jdbcType="VARCHAR" />
    <collection property="permissionsList" column="id" javaType="list" select="selectAllpermissions"></collection>
</resultMap>

<select id="selectAllpermissions" resultType="com.jointem.hrm.entity.Permissions" parameterType="java.lang.Integer">
    select id, url,name  from permissions where id in (select roles_permissions.permission_id from roles_permissions where roles_permissions.role_id=#{id})
</select>

<select id="selectAllRoles" resultMap="RoleMap" parameterType="java.lang.Integer">
    select id, description from roles where id in (select users_roles.role_id from users_roles where users_roles.user_id=#{id})
</select>

<select id="findUsersByName" parameterType="String" resultMap="usersMap">
    select id,username,password,sex,birthday,createtime,content from        users where username=#{username}
</select>
<!-- 關聯查詢角色集合與許可權集合 -->

“`
總結
1.關聯查詢首先要建立對應的需求實體
2.瞭解resultmap屬性