java递归树形菜单显示
今天写权限整好涉及到一些菜单的显示,最先想到的是递归遍历输出,但是呢在网上找了很多有关的资料没有符合自己需求的所以就自己写了一个,如果觉得靠谱
请点点关注!!!赞一个
首先看一些设计的数据库设计

菜单的id menuId
菜单的名称 menuName
菜单的地址 url
菜单的父级别 parent
菜单的编码 menuCode
比较简单的设计:
闲话不多说直接上代码
实体类 如下:

此处省略 GET ()SET()方法
注意:
这里多了个 childrs集合 因为我们要进行递归遍历 把每个菜单的子元素都显示出来 根据自己的需求选好集合我用的是List如果你希望唯一就用set集合
这里采用List
接下来我们来看递归部分如下:

简单的几行代码就完成的递归的遍历所有菜单的 每个菜单又会携带自己的子子孙孙菜单的 这样的结果是你想到要的么????
接下来我们来解释一下这些代码的意义
menuMapper.conditionleveMenu(menu.getMenuId());
第一次进来,获取的是当前的一级元素
然后把一级元素放入我当前菜单的子元素中
因为:我的子元素的下面很有可能还有子元素 所以我又把上面的集合元素循环的进行的遍历
for(Menu men : list){
然后这里采用的是递归的算法 recursion(menu)传入当前的菜单
}
这个方法主要做了几件事
1查询当前菜单下面的所有子元素菜单
2如果有子元素菜单 添加到当前菜单的子元素集合中
添加完毕 我们要考虑的是万一子元素集合下面还有菜单元素怎么办
所以进行了遍历
3循环遍历子元素集合进行重复操作 放入菜单 然后进入方法
1查询当前菜单下面的所有子元素
2如果有子元素菜单 添加到当期那菜单的子元素集合中
3循环遍历子元素集合进行进行重复操作.......同上
直到循环完毕
主要代码 就是这些 最重要的是实现了这个功能 细节留给你们开阔大脑去想把!!嘿嘿 关于本文有什么问题可以在下面留言交流,如果您觉得本文对您有帮助,可以点击下面的 推荐 支持一下我,博客一直在更新,欢迎 关注 。
java递归树形菜单显示的更多相关文章
- java构建树形菜单递归工具类
1.设计菜单实体 import java.util.List; public class Menu { //菜单id private Long id; //父节点id private Long par ...
- java 递归 树形
//菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new ...
- java递归构建菜单树
package testSimple; import java.util.ArrayList; import java.util.List; public class BuildTree { publ ...
- c# 递归树形菜单
首先创建模型类Menus public class Menus { //菜单Id public int Id { get; set; } //菜单名 public string MenuName { ...
- java后端树形菜单使用递归方法
数据库的设计 使用ssm 实体类 mapper映射文件查询出所有的菜单 使用递归方法
- 用dtree实现树形菜单 dtree使用说明
http://www.jb51.net/article/28566.htm 准备工作: 请从脚本之家http://www.jb51.net/jiaoben/31974.html下载dtree.zip文 ...
- Vue.js 递归组件实现树形菜单
最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = tr ...
- java树形菜单实现
java树形菜单实现 公司表: 部门表: 实体类: public class Node { private Integer companyId;//公司id private String compan ...
- 用Vue.js递归组件构建一个可折叠的树形菜单
在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', { template: `<!--Invoking myself! ...
随机推荐
- TZOJ-STL系列题
C++实验:STL之vector #include <bits/stdc++.h> using namespace std; void Input(vector<int>&am ...
- IntelliJ的.iml文件及相关的Class Not Found 问题
.iml 文件是IntelliJ IDEA 自动创建的模块文件,用于Java应用开发,存储一些模块开发相关的信息,比如一个Java组件, 插件组件,Maven组件等等, 还可能会存储一些模块路径信息, ...
- abstract class
在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口.而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点 ...
- java面试题 - 框架
1.servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request.resp ...
- 洛谷-P3809-后缀排序(后缀数组)
看了求后缀数组的倍增法之后很快就理解了,但是自己写的倍增法用map排序还是超时了.然后看了两天别人写的模板,题目是通过了,但感觉代码还是半懂半背的.以后多熟悉熟悉吧: 后缀数组 #include &q ...
- Android开发之《Module相互引用,NDK不能正常Debug》
解决Android Studio不能进入调试模式问题 Android Studio 2.2.3 native debug 无法调试?:https://www.zhihu.com/question/54 ...
- windows版 Sublime Text 2 快捷键
ucifr 翻译了 Sublime Text 2 快捷键 Mac版,用win系统的哥们表示伤不起啊~ 今天把windows版 Sublime Text 2 快捷键 整理了出来,与众兄弟们分享: Ctr ...
- js new 与 return
前置: 默认情况下, 函数的返回值是 undefined (即没有定义返回值). new 操作符 js 中的 new 操作符,可以是我们像 java 一样,获得一个新的对象,例如: function ...
- linux公社大量免费的在线android资料
2011年linux数据库的android在线分享 linux公社:开源公社 本文撰写:杨凯专属频道 下载如需密码,详见博客案例:点击我去查看密码 2011年9月12日 21: ...
- GDB调试指南-单步调试
前言 前面通过<启动调试>,<断点设置>,<变量查看>,我们已经了解了GDB基本的启动,设置断点,查看变量等,如果这些内容你还不知道,建议先回顾一下前面的内容.在启 ...