角色查詢該角色下的權限樹不論多少子節點都能查出來 通過mybatits查詢方式

查詢到的結果

{
    "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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章