java8 获取部门树形结构
需求:从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 获取部门树形结构相关推荐
- 部门树形结构,使用Treeview控件显示部门
部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...
- mysql反向递归查询_递归查询所有下级部门树形结构反向递归获取所有ID集合
mysql递归搜索再之前得原创文档里已经写明了,这个网上比较多. 直接进入正题:原创手写反递归 package com.kb.nxccims.common.util; import java.util ...
- Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...
- SpringBoot+JsTree实现在编辑时能选择树形结构并获取选中的ID
场景 SpringBoot+Jquery+jsTree实现页面树型结构: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/90897 ...
- Java8新特性:使用Stream流递归实现遍历树形结构
作者:Lcry blog.csdn.net/qq_19244927/article/details/106481777 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示 ...
- 03【若依框架解读】Tree树形结构的控制(菜单,部门)
背景 若依管理框架中包含了不少菜单树和权限树的控制,主要实现的方式是递归,比较容易阅读和理解.构建属性结构本身是开发中非常常见的场景.掌握后非常容易在工作中使用. 属性结构控制 后端返回列表,前端控制 ...
- Java8新特性-使用Stream流来实现递归遍历树形结构(案例)
Java8新特性-Stream流 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来 ...
- js过滤树形结构数据并获取新的树形结构
工作中不时会遇见对树形结构数据的处理,有时候只需要遍历并获取其中一个属性值就行了(这部分内容请参考笔者的另一篇博客JS遍历树形结构方法),有时候我们则需要根据某些条件去过滤并得到新的树形结构数据. l ...
- mysql 叶子节点_MySQL 树形结构 根据指定节点获取其所有叶子节点
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...
最新文章
- 3dmax导出fbx时如何带贴图_houdini | 第一章 第三节 贴图与顶点动画
- leetcode 454 四数相加
- Java黑皮书课后题第5章:5.40(模拟:正面或反面)编写程序,模拟抛硬币一百万次,显示出现正面和反面的次数
- 虚拟dom添加虚拟dom_虚拟DOM缓慢。 认识记忆化的DOM
- beyond compare 4.2.9桌面右键集成的问题修复
- 基于字典的超分辨率实现的各种方法
- 「leetcode」C++题解:226.翻转二叉树,递归法与迭代法详解
- PIL 图片压缩处理
- excel转txt后导入mysql 20211207
- 14届数独-真题标准数独-Day 8-20220123
- 为什么公司要和商标同步注册?
- ROS pgm转jpg
- Linux 环境下iSCSI Target 与 Initiator 配置
- C语言中的比较大小的宏定义与反斜杠符号 ' \ '
- ResNet的改进系列:ResNext和Res2Net
- XZ_Python3之使用Python批量打企业ipa包遇到的问题和解决
- Deep learning for drug repurposing: methods, databases, and applications
- DevExpress:可左右滑动的图片框ImageSlider
- 高数_证明_极限存在的单调有界准则
- 【步进电机与Arduino使用教程】