首页 > 其他分享 >如何构建资源树

如何构建资源树

时间:2023-05-16 14:56:18浏览次数:43  
标签:COMMENT 菜单 menus menu List 如何 构建 NULL 资源


创建数据结构

CREATE TABLE `menu` (
  `id` bigint(20) unsigned NOT NULL COMMENT '主键',
  `name` varchar(11) NOT NULL COMMENT '名称',
  `sort_no` smallint(5) unsigned NOT NULL DEFAULT '10' COMMENT '排序号',
  `parent_id` bigint(20) unsigned NOT NULL COMMENT '父节点id',
  `icon` varchar(200) DEFAULT NULL COMMENT '图标',
  `remark` varchar(20) DEFAULT NULL COMMENT '备注',
  `url` varchar(60) DEFAULT NULL COMMENT '菜单链接',
  `level` tinyint(4) DEFAULT NULL COMMENT '菜单等级',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';

结束

组装树形结构

/**
  * 递归获取下级菜单
  * @param   pid
  * @param menus  所有菜单
  * @return
  */
 public List<Menu> getChild(Long pid, List<Menu> menus) {
     //子菜单列表
     List<Menu> childList = new ArrayList<>();
     for (Menu menu : menus) {
         if (pid.equals(menu.getParentId())) {
             childList.add(menu);
         }
     }
     //遍历 获取子菜单的子菜单
     for (Menu menu : childList) {
         List<Menu> child = getChild(menu.getId(), menus);
         menu.setChildren(child);
     }
     //递归出口  childList长度为0
     if (childList.size() == 0) {
         return new ArrayList<>();
     }
     return childList;
 }

获取所有的资源

/**
  * 根据角色id获取对象集合信息
  */
 public List<Menu> getAllMenus(){
     List<Menu> menus = this.loadAll();
     //返回的菜单树
     List<Menu> rootMenus = new ArrayList<>();
     for (Menu menu : menus) {
         //pid(上级Id)为0的是根菜单
         if (0==(menu.getParentId())) {
             rootMenus.add(menu);
         }
     }
     //遍历,找到二级菜单(根菜单的id和所有菜单中的pid比较)
     for (Menu rootMenu : rootMenus) {
         List<Menu> child = getChild(rootMenu.getId(), menus);
         rootMenu.setChildren(child);
     }
     return rootMenus;
 }

标签:COMMENT,菜单,menus,menu,List,如何,构建,NULL,资源
From: https://www.cnblogs.com/liuyupen/p/17405634.html

相关文章

  • 哪里可以获取bricscad23中文破解版资源,最新bricscad中文版下载
    哪里可以获取bricscad23中文破解版资源呢,小编为大家带来了最新bricscad中文版下载安装包。BricsCAD23是一款功能强大、易于使用的CAD软件,可以帮助用户进行2D和3D设计和制造,并提供多种高级功能和集成方式,是工程师和制造商的重要工具。bricscad中文版下载Bricscad的提供所有熟悉......
  • 构建之法阅读笔记其一
    《构建之法》这本书一共有十七个章节,先来说说我看完前三章的感受与《人月神话》不同,这本书上的专业术语相对而言较多第一章中作者为我们介绍了些关于软件工程的基本知识,软件开发的各个阶段以及其所推广需要的商业模式,介绍了各种开发软件并阐述了其优缺点二三章则是对个人能力的......
  • 5/18号晚7:30,韩金贤老师教你如何「变革绩效评估」?
    可直接手机扫码【添加提醒】,或者是点击链接:https://rmt.h5.xeknow.com/sl/2SCgNc韩金贤老师职业背景:拥有16年人力资源管理经验和11年团队管理实践,曾担任战略规划师、人力资源负责人、培训负责人。十几年实战中,在战略管理、组织目标管理、人力资源管理、培训开发与人才发展方面......
  • 如何成为一名架构师
    一、架构师的能力容量规划架构设计数据库设计缓存设计高并发方案性能压测回滚方案分库分表数据迁移监控报警领域模型框架选型......
  • 传输文件测试一下群晖2.5G网卡性能表现如何,实操验证
    各位观众好,欢迎来到黑菌的博客网站,淘宝同名,欢迎咨询!1、A文件所在的机器是N5105的群晖上B机器也安装了群晖,接了一个2.5G的网卡2、使用同步软件CloudSync,传输远程文件夹ESXI中的文件到本地的FTP文件夹 3、效果看图偶有波动是文件有大小,不是一份文件基本上稳定在260上下......
  • 从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)
    前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文。(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在Android的用户交互中,按钮触发的......
  • 企业即时沟通软件有哪些?要如何选择?
    在企业管理中,沟通是至关重要的一部分。随着科技的不断进步,企业间的沟通方式也在发生改变。传统的邮件和电话已经难以满足企业沟通的需求,因此,越来越多的企业开始采用即时沟通软件来进行沟通。以下是一些常见的企业即时沟通软件:企业微信企业微信是一款由腾讯公司开发的企业即时沟通软......
  • 如何使用IndexOf方法获取JS对象数组中的索引
    获得数组里某一个对象的索引的最佳方法是什么呢?比如如下场景:varhello={hello:'world',foo:'bar'};varqaz={hello:'stevie',foo:'baz'}varmyArray=[];myArray.push(hello,qaz);现在我想得到hello属性值是stevie的对象的索引。在这个例......
  • 如何分发Teamcenter的jar文件?
    1.将jar包拷贝到TC的Portal文件夹下的plugins文件夹中,例如:D:\Siemens\Teamcenter14\portal\plugins 2.删除用户文件中的Teamcenter临时文件,例如:C:\Users\zyq\Teamcenter 3.运行TC注册bat文件:D:\Siemens\Teamcenter14\portal\registry\genregxml.bat  ......
  • 如何在 conda 环境中使用 pip 进行安装?
    有时候Conda中没有某个模块,但是pip中有,这时候就需要用到这里的技巧了。在conda环境中使用pip进行安装可以通过以下步骤完成:1、激活你的conda环境打开终端(命令提示符)并输入以下命令:condaactivate<环境名称>将<环境名称>替换为你要激活的conda环境的名称。2、......