前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java若依框架学习(一)菜单保存到数据库,根据不同的权限拿出不同的菜单

java若依框架学习(一)菜单保存到数据库,根据不同的权限拿出不同的菜单

作者头像
一写代码就开心
发布2021-06-17 19:52:18
发布2021-06-17 19:52:18
2.1K00
代码可运行
举报
文章被收录于专栏:java和pythonjava和python
运行总次数:0
代码可运行

目录

数据库

和菜单相关的数据库

以上是我们保存菜单的表,以后就可以在这个表里面添加菜单

查询出数据

如果用户是管理员,需要将全部的菜单查询出来,我们可以写一个sql,查询出全部的菜单

代码语言:javascript
代码运行次数:0
运行
复制
<select id="selectMenuNormalAll" resultMap="SysMenuResult">
		select distinct m.menu_id, m.parent_id, m.menu_name, m.url, m.visible, m.is_refresh, ifnull(m.perms,'') as perms, m.target, m.menu_type, m.icon, m.order_num, m.create_time
		from sys_menu m
		查询出菜单的类型是目录,菜单的,而且菜单状态是可见的
		where m.menu_type in ('M', 'C') and m.visible = 0
		order by m.parent_id, m.order_num
	</select>

以上是全部的菜单都查询出来了,我们还需要根据父子级,进行处理一下数据,将处理之后的数据再返回给前段。

处理查询出的数据,整理为子父级关系后返回

先将父id为0的菜单整理出来,

代码语言:javascript
代码运行次数:0
运行
复制
getChildPerms(menus, 0)   第一个参数是查询出的菜单的集合,第二个参数是父id,
代码语言:javascript
代码运行次数:0
运行
复制
    /**
     * 根据父节点的ID获取所有子节点
     * 
     * @param list 分类表
     * @param parentId 传入的父节点ID
     * @return String
     */
    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
    {
    //先创建一个菜单的list集合对象
        List<SysMenu> returnList = new ArrayList<SysMenu>();
//一直遍历全部的菜单list集合
        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
        {
            SysMenu t = (SysMenu) iterator.next();
            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
            if (t.getParentId() == parentId)
            {
            只要遍历出的菜单的parentId=0  ,那么就继续找这个菜单的子级
                recursionFn(list, t);//这个方法就是获取子菜单
                returnList.add(t);每一个菜单的属性children里面都有自己的子菜单了,放到list集合里面
            }
        }
        return returnList;
    }

SysMenu实体类里面还有子菜单集合

代码语言:javascript
代码运行次数:0
运行
复制
  /** 子菜单 */
    private List<SysMenu> children = new ArrayList<SysMenu>();
代码语言:javascript
代码运行次数:0
运行
复制
/**
     * 递归列表
     * 
     * @param list
     * @param t
     */

第一个参数是数据库查询出的全部的数据,第二个参数是isparent=0的菜单
    private void recursionFn(List<SysMenu> list, SysMenu t)
    {
        // 得到子节点列表  获取到当前isparent=0的菜单的子菜单集合
        List<SysMenu> childList = getChildList(list, t);
        t.setChildren(childList);  把子菜单集合放到  当前菜单的属性里面
        for (SysMenu tChild : childList)  遍历子菜单
        {
            if (hasChild(list, tChild))  如果子菜单下还有子菜单
            {
                recursionFn(list, tChild);  一直遍历获取菜单,放到父的属性里面
            }
        }
    }
代码语言:javascript
代码运行次数:0
运行
复制
   /**
     * 得到子节点列表
     * 第一个参数是数据库查询出的全部的数据,第二个参数是isparent=0的菜单
     */
    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
    {
        List<SysMenu> tlist = new ArrayList<SysMenu>();
        Iterator<SysMenu> it = list.iterator();  //迭代全部的菜单
        while (it.hasNext())
        {
            SysMenu n = (SysMenu) it.next();//获取到全部菜单里面的一个

//如果全部菜单里面的每一个菜单的父id等于  当前菜单的菜单id
            if (n.getParentId().longValue() == t.getMenuId().longValue())//、
            {
                tlist.add(n);  就将遍历出来的这个菜单放到一个list集合里面
            }
        }
        return tlist;返回list集合
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 数据库
    • 和菜单相关的数据库
    • 查询出数据
    • 处理查询出的数据,整理为子父级关系后返回
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档