1.数据库表设计

2.实体类设计

 package com.ieou.capsule.dto.SystemPermissions;

 import java.util.List;

 /**
* 功能菜单类
*/
public class SystemPermissionsTree { private String functionCode;//菜单码 private String parentFunctionCode;//父级菜单码 private String functionName;//菜单名 private Boolean flag; // true:选中 false:未选中 private List<SystemPermissionsTree> childrenList; public String getFunctionCode() {
return functionCode;
} public void setFunctionCode(String functionCode) {
this.functionCode = functionCode;
} public String getParentFunctionCode() {
return parentFunctionCode;
} public void setParentFunctionCode(String parentFunctionCode) {
this.parentFunctionCode = parentFunctionCode;
} public String getFunctionName() {
return functionName;
} public void setFunctionName(String functionName) {
this.functionName = functionName;
} public Boolean getFlag() {
return flag;
} public void setFlag(Boolean flag) {
this.flag = flag;
} public List<SystemPermissionsTree> getChildrenList() {
return childrenList;
} public void setChildrenList(List<SystemPermissionsTree> childrenList) {
this.childrenList = childrenList;
}
}

3.递归工具类

 package com.ieou.capsule.util;

 import com.ieou.capsule.dto.SystemPermissions.SystemPermissionsTree;

 import java.util.ArrayList;
import java.util.List; public class TreeUtil {
/**
* 作者:一沐枫一
* 来源:CSDN
* 原文:https://blog.csdn.net/gxgl8811/article/details/72803833
* 版权声明:本文为博主原创文章,转载请附上博文链接!
*/ public static List<SystemPermissionsTree> getTreeList(List<SystemPermissionsTree> entityList) {
List<SystemPermissionsTree> resultList = new ArrayList<>(); //获取顶层元素集合
String parentCode;
for (SystemPermissionsTree entity : entityList) {
parentCode = entity.getParentFunctionCode();
//顶层元素的parentCode==null或者为0
if (parentCode == null || "0".equals(parentCode)) {
resultList.add(entity);
}
} //获取每个顶层元素的子数据集合
for (SystemPermissionsTree entity : resultList) {
entity.setChildrenList(getSubList(entity.getFunctionCode(), entityList));
} return resultList;
} /**
* 获取子数据集合
*
* @param id
* @param entityList
* @return
* @author jianda
* @date 2017年5月29日
*/
private static List<SystemPermissionsTree> getSubList(String id, List<SystemPermissionsTree> entityList) {
List<SystemPermissionsTree> childList = new ArrayList<>();
String parentId; //子集的直接子对象
for (SystemPermissionsTree entity : entityList) {
parentId = entity.getParentFunctionCode();
if (id.equals(parentId)) {
childList.add(entity);
}
} //子集的间接子对象
for (SystemPermissionsTree entity : childList) {
entity.setChildrenList(getSubList(entity.getFunctionCode(), entityList));
} //递归退出条件
if (childList.size() == 0) {
return null;
} return childList;
} }

java递归 处理权限管理菜单树或分类的更多相关文章

  1. springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)

    一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...

  2. [转]java web简单权限管理设计

    原文地址:http://blog.csdn.net/zwx19921215/article/details/44467099 最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery eas ...

  3. java web简单权限管理设计

    一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色 ...

  4. 【Java】JavaWeb权限管理

    权限管理分析 每个网站都涉及到访问权限的控制.每个站点资源都需要被管理起来,用户只有具有访问某个资源的特定权限,才能够访问,否则拒绝访问.网站的访问权限控制,一种方法从 URI 入手,站点的每个资源都 ...

  5. java中通用权限管理设计(转)

    原文地址:http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html 转自博客园暗夜精灵-鬼才阁 实现业务系统中的用户权限管理 B/ ...

  6. vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成

    由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...

  7. ERP的权限管理的操作与设计--开源软件诞生24

    赤龙ERP用户与权限管理讲解--第24篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/re ...

  8. JAVA递归生成树形菜单

    递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...

  9. java生成多级菜单树

    使用java实现一个多级菜单树结构 先上数据库 ps_pid字段很重要,是父级菜单的id Menu类 Menu类要新增一个字段,用来存放子菜单 /** * 子菜单列表 */ private List& ...

随机推荐

  1. [转载] 关于出现“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误的可能原因

    1. 对于该问题确实存在UNION前后SELECT语句中的列数不同导致:2. 以下为个人遇到的一种可能:在项目开发中由于有张表是动态的,即有个基础表,其他的表按年月根据基础表来生成动态表,动态表结构和 ...

  2. Java常考面试题(一)

    https://blog.csdn.net/linzhiqiang0316/article/details/80473906

  3. JSP Servlet javaben

    CLASSPATH=D:\Dev\jdk\lib\tools.jar;D:\Dev\jdk\lib\dt.jarJAVA_HOME=D:\Dev\jdkPath=%JAVA_HOME%\bin 一:T ...

  4. 原生态JDBC

    原生态JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API.JDBC是java访问数据库的标准规范,可以为不同的关系 ...

  5. pyqt5 树节点点击实现多窗口切换

    # coding=utf-8 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui ...

  6. python分割txt文件

    a=open('A.txt','r').readlines() n=3 #份数 qty=len(a)//n if len(a)%n==0 else len(a)//n+1 #每一份的行数 for i ...

  7. K8S学习笔记之CentOS7集群使用Chrony实现时间同步

    0x00 概述 容器集群对时间同步要求高,实际使用环境中必须确保集群中所有系统时间保持一致,openstack官方也推荐使用chrony代替ntp做时间同步. Chrony是一个开源的自由软件,像Ce ...

  8. php 数字变汉字

    //数字变汉字 function getTheWord($num) { $arr_n = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九', ...

  9. CentOS ping: unknown host 解决方法

    如果ping命令返回如下错误,那主要的可能性就是系统的DNS设置有误 [root@CentOS5 ~]# ping www.sina.com.cn ping: unknown host www.sin ...

  10. 基础_cifar10_model

    今天进一步在cifar10数据集上解决几个问题: 1.比较一下序贯和model,为什么要分成两块: 2.同样的条件下,我去比较一下序贯和model.这个例子作为今天的晚间运行. 1.比较一下序贯和mo ...