mybatis使用者角色許可權一對多關聯查詢
阿新 • • 發佈:2019-01-26
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屬性