查詢到的結果
{
"roleId": 12,
"roleName": "testAdmin",
"menuList": [
{
"id": 1,
"icon": null,
"parentId": 0,
"menuName": "系統管理",
"permissions": "sys:list",
"createTime": "2018-11-09T08:01:53.000+0000",
"menuList": [
{
"id": 2,
"icon": null,
"parentId": 1,
"menuName": "用戶管理",
"permissions": "user:list",
"createTime": "2018-11-09T08:18:24.000+0000",
"menuList": [
{
"id": 6,
"icon": null,
"parentId": 2,
"menuName": "新增用戶",
"permissions": "user:add",
"createTime": "2018-11-09T08:21:40.000+0000",
"menuList": [
{
"id": 22,
"icon": null,
"parentId": 6,
"menuName": "新增用戶的兒子",
"permissions": null,
"createTime": "2018-11-29T08:55:27.000+0000",
"menuList": [
{
"id": 23,
"icon": null,
"parentId": 22,
"menuName": "新增用戶的孫子",
"permissions": null,
"createTime": "2018-11-29T08:58:50.000+0000",
"menuList": []
}
]
}
]
},
{
"id": 7,
"icon": null,
"parentId": 2,
"menuName": "刪除用戶",
"permissions": "user:delete",
"createTime": "2018-11-09T08:22:29.000+0000",
"menuList": []
},
{
"id": 8,
"icon": null,
"parentId": 2,
"menuName": "修改用戶",
"permissions": "user:update",
"createTime": "2018-11-09T08:22:03.000+0000",
"menuList": []
}
]
}
]
}
]
}
表結構
菜單表實體類
public class Menu {
private Integer id;
private String icon;
private Integer parentId;
private String menuName;
private String permissions;
private Date createTime;
//... get set 省略
}
public class MenuTree extends Menu {
private List<Menu> menuList;
//... get set 省略
}
public class RoleMenuInfo {
private Integer roleId;
private String roleName;
private List<MenuTree> menuList;
//... get set 省略
}
<!--這個是返回結果集對象-->
<resultMap id="RoleMenuMap" type="com.niezhiliang.permission.tree.entity.RoleMenuInfo">
<id column="id" jdbcType="INTEGER" property="roleId" />
<result column="role_name" jdbcType="VARCHAR" property="roleName" />
<collection property="menuList" javaType="java.util.ArrayList" column="id"
select="getMenu">
</collection>
</resultMap>
<!--這個是返回結果中的menuList屬性結果集對象-->
<resultMap id="ParentMenu" type="com.niezhiliang.permission.tree.entity.MenuTree">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="icon" jdbcType="VARCHAR" property="icon" />
<result column="parent_id" jdbcType="INTEGER" property="parentId" />
<result column="menu_name" jdbcType="VARCHAR" property="menuName" />
<result column="permissions" jdbcType="VARCHAR" property="permissions" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="role_id" jdbcType="INTEGER" property="roleId" />
<!--column 作用是傳參給getChildMenu這個sql使用-->
<collection property="menuList" javaType="java.util.ArrayList" column="{roleId=roleId,id=id}"
select="getChildMenu">
</collection>
</resultMap>
<!-- 查詢這個方法-->
<select id="selectSubMenu" resultMap="RoleMenuMap">
select * from role where id = #{roleId}
</select>
<!--查詢當前角色下所有的頂層的菜單-->
<select id="getMenu" resultMap="ParentMenu">
select m.*,r.role_id 'roleId' from menu m left join role_menu r on m.id = r.menu_id
where r.role_id = #{roleId} and m.parent_id = 0
</select>
<!--通過上一層的菜單編號查詢改角色所有的子菜單-->
<select id="getChildMenu" resultMap="ParentMenu">
select m.*,r.role_id 'roleId' from menu m left join role_menu r on m.id = r.menu_id
where r.role_id = #{roleId} and m.parent_id = #{id}
</select>
然後直接查詢就出來啦。
//文章開頭查詢到的結果就是角色爲12的用戶的權限
127.0.0.1:8080/getMenu?roleId=12
demo地址:https://github.com/niezhiliang/spring-boot/tree/master/permission-tree