需求:从mysql数据库中查出所有的部门组织,按照父子关系,组成树形结构返回给前端

数据库设计:

DROP TABLE IF EXISTS `management_info`;
CREATE TABLE `management_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',`management_name` varchar(200) DEFAULT NULL COMMENT '部门名称',`parent_id` bigint(20) DEFAULT NULL COMMENT '上级部门id',`root_id` bigint(20) DEFAULT NULL COMMENT '根部门id',`is_deleted` int(11) DEFAULT '0' COMMENT '记录状态(0:未删除,1:已删除)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='部门层级信息表'

根节点的字段,非常重要,不仅是作为后期维护不同的组织部门,而且在java代码中,通过根节点来向下拼接,因为我们组织部门是有一个总部门控制,在总部门下再依次增加子部门

实体类VO设计

@Data
public class ManagementInfoVO extends ManagementInfo{@ApiModelProperty(value = "子部门集合")private List<ManagementInfoVO> childList;
}

实体类用递归嵌套的形式设计

实现类代码

@Overridepublic List<ManagementInfoVO> getManagementInfoList(Long rootDeptId) {// 查询根节点下所有部门信息ManagementInfoExample example = new ManagementInfoExample();ManagementInfoExample.Criteria criteria = example.createCriteria();criteria.andIsDeletedEqualTo(0);criteria.andRootIdEqualTo(rootDeptId);List<ManagementInfo> managementInfos = managementInfoMapper.selectByExample(example);// 组成树形结构List<ManagementInfoVO> resultTmp = new ArrayList<>();if (CollectionUtils.isNotEmpty(managementInfos)) {List<ManagementInfoVO> VOList = new ArrayList<>();for (ManagementInfo info:managementInfos) {ManagementInfoVO vo = new ManagementInfoVO();BeanUtils.copyProperties(info,vo);VOList.add(vo);}resultTmp = VOList.stream().filter(item -> item.getParentId()==-1).map(item -> {item.setChildList(recursiveQuery(item, VOList));return item;}).collect(Collectors.toList());}return resultTmp;}
/*** 迭代查询权限** @params parentId, permissions* @return* @author zhusanlu* @date 2022/1/19*/private List<ManagementInfoVO> recursiveQuery(ManagementInfoVO root, List<ManagementInfoVO> permissions) {List<ManagementInfoVO> children = permissions.stream().filter(item -> {return Objects.equals(item.getParentId(), root.getId()); }).map(item -> {item.setChildList(recursiveQuery(item, permissions));return item;}).collect(Collectors.toList());return children;}

java8 获取部门树形结构相关推荐

  1. 部门树形结构,使用Treeview控件显示部门

    部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...

  2. mysql反向递归查询_递归查询所有下级部门树形结构反向递归获取所有ID集合

    mysql递归搜索再之前得原创文档里已经写明了,这个网上比较多. 直接进入正题:原创手写反递归 package com.kb.nxccims.common.util; import java.util ...

  3. Java8 Stream流递归,几行代码搞定遍历树形结构

    欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...

  4. SpringBoot+JsTree实现在编辑时能选择树形结构并获取选中的ID

    场景 SpringBoot+Jquery+jsTree实现页面树型结构: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90897 ...

  5. Java8新特性:使用Stream流递归实现遍历树形结构

    作者:Lcry blog.csdn.net/qq_19244927/article/details/106481777 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示 ...

  6. 03【若依框架解读】Tree树形结构的控制(菜单,部门)

    背景 若依管理框架中包含了不少菜单树和权限树的控制,主要实现的方式是递归,比较容易阅读和理解.构建属性结构本身是开发中非常常见的场景.掌握后非常容易在工作中使用. 属性结构控制 后端返回列表,前端控制 ...

  7. Java8新特性-使用Stream流来实现递归遍历树形结构(案例)

    Java8新特性-Stream流 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来 ...

  8. js过滤树形结构数据并获取新的树形结构

    工作中不时会遇见对树形结构数据的处理,有时候只需要遍历并获取其中一个属性值就行了(这部分内容请参考笔者的另一篇博客JS遍历树形结构方法),有时候我们则需要根据某些条件去过滤并得到新的树形结构数据. l ...

  9. mysql 叶子节点_MySQL 树形结构 根据指定节点获取其所有叶子节点

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...

最新文章

  1. 3dmax导出fbx时如何带贴图_houdini | 第一章 第三节 贴图与顶点动画
  2. leetcode 454 四数相加
  3. Java黑皮书课后题第5章:5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数
  4. 虚拟dom添加虚拟dom_虚拟DOM缓慢。 认识记忆化的DOM
  5. beyond compare 4.2.9桌面右键集成的问题修复
  6. 基于字典的超分辨率实现的各种方法
  7. 「leetcode」C++题解:226.翻转二叉树,递归法与迭代法详解
  8. PIL 图片压缩处理
  9. excel转txt后导入mysql 20211207
  10. 14届数独-真题标准数独-Day 8-20220123
  11. 为什么公司要和商标同步注册?
  12. ROS pgm转jpg
  13. Linux 环境下iSCSI Target 与 Initiator 配置
  14. C语言中的比较大小的宏定义与反斜杠符号 ' \ '
  15. ResNet的改进系列:ResNext和Res2Net
  16. XZ_Python3之使用Python批量打企业ipa包遇到的问题和解决
  17. Deep learning for drug repurposing: methods, databases, and applications
  18. DevExpress:可左右滑动的图片框ImageSlider
  19. 高数_证明_极限存在的单调有界准则
  20. 【步进电机与Arduino使用教程】

热门文章

  1. 笔记:李想分享的创业经历的5个楼层
  2. Linux查看系统资源信息
  3. xml数据处理--sax模块使用
  4. Proteus实现555计时器模拟简易电子琴
  5. 从scratch到python轻松学下载_STEAM教育-[少儿创客] 从Scratch到Python——python turtle-电路城论坛 - 电子工程师学习交流园地...
  6. 图像空域增强技术及联合运用
  7. python求解拉普拉斯矩阵
  8. 一个bug,开发不认,怎么办
  9. 架构师必备:云原生数据湖体系
  10. Win11电脑怎么截图?Win11电脑截图的多种方法介绍