管理系统菜单父子结构,有parentId,快速获取结构树代码

机构树,数据表格里面有parentId这种,通过递归查询机构树

结果类似于

实体:通过list存储子菜单

@Data
public class OrganizationVo{
    private String fatherName;

    private Integer id;

    private String name;

    private Integer fatherId;

    private Date createTime;

    private Date updateTime;

    /**
     * 是否叶子节点:0否、1是
     */
    private Integer isLeaf;

    private static final long serialVersionUID = 1L;

    private List<CustomerOrganizationVo> child;

}

通过递归查询子机构

@Override
    public OrganizationVo departmentTree(Integer id) {
        OrganizationVo OrganizationVoTree = new OrganizationVo();
        //找到最顶级菜单
        Organization departmentFather = organizationMapper.selectByPrimaryKey(1);
        OrganizationVoTree.setId(departmentFather.getId());
        OrganizationVoTree.setName(departmentFather.getName());
        OrganizationVoTree.setFatherId(departmentFather.getFatherId());
        OrganizationVoTree.setChild(getDepartmentChild(departmentFather));
        return OrganizationVoTree;
    }

    private List<OrganizationVo> getDepartmentChild(Organization father) {
        List<OrganizationVo> tree = new LinkedList<>();
        if (father.getIsLeaf() == 0) {
            //通过当前机构的id,找到他的所有的字机构,这里使用Example
            OrganizationExample example = new OrganizationExample();
            example.createCriteria().andFatherIdEqualTo(father.getId());
            List<Organization> OrganizationList = organizationMapper.selectByExample(example);
            for (Organization organization : OrganizationList) {

                OrganizationVo organizationVo = new OrganizationVo();
                BeanUtils.copyProperties(organization, organizationVo);

                organizationVo.setFatherId(father.getId());
                organizationVo.setFatherName(father.getName());
                //递归查询子结构
                organizationVo.setChild(getDepartmentChild(organization));
                tree.add(organizationVo);
            }
        }
        return tree;
    }

 

热门文章

暂无图片
编程学习 ·

leetcode 124. 二叉树中的最大路径和

题目 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 思路 简单题,dfs返回当前节点为一端的最大链。答案有两种情况,1 当前节点到子孙的一条链 2 当前节点为中端,…
暂无图片
编程学习 ·

c#导入百度统计API数据

最近项目中需要增加一些新功能:当前在线人数,总访问量统计,今日访问量,上一年度访问量,找了很多第三方统计工具,最后确定用百度统计,因为项目是vue的,直接引入的时候出现了跨域,发现前端用jsonp解决不了,所以就直接用c#请求再返回给前端了,话不多说,具体操作如下(…
暂无图片
编程学习 ·

【C++】引用

引用的定义引用是给另外一个变量起别名,所以引用不会分配内存空间。引用的声明方法:类型标识符 &引用名=目标变量名;(如int &ptr = num;)引用和指针的区别1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。 2、引用在定义的时候必须…
暂无图片
编程学习 ·

【数据结构与算法】排序算法之冒泡排序(C++、Python)

原理介绍: 假设有长度为n的数组a,按照从小到大的顺序进行排序。冒泡排序的思路为:首先从数组的第一个元素开始,对数组中相邻的两个元素进行比较大小。如果左边(即索引数字小的)元素的值大于右边的元素,则交换这两个元素在数组中的位置,一直到最后一个元素为止。此时数组…
暂无图片
编程学习 ·

通过组键扫描使得Spring管理类的对象

通过组件扫描使得Spring管理类的对象。 如果User类需要使用Spring框架管理,必须声明User类所在的包,然后再用测试类中的AnnotationConfigApplicationContext的构造方法中将包名作为参数():import org.springframework.context.annotation.AnnotationConfigApplicationContex…
暂无图片
编程学习 ·

处理服务器cpu 占用高达99%问题

102服务器cpu 占用高达99%,查看服务百度了下这个服务是 swap分区的作用是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用。 kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。 所以将服务器升级了内存和cpu 然而 服务器扩容…
暂无图片
编程学习 ·

React配置less以及less的全局变量设置

工作中接触react的项目比较的少,对于less的全局变量设置在vue项目中设置过,react的全局变量设置没怎么接触了。 看到有小伙伴问这个,试着在网上找了下,也是花费了不少的功夫才找到不错的方式,在这里分享给大家。 由于之前vue项目里没法使用sass-resource-loader,一开始也…
暂无图片
编程学习 ·

AssemblyInfo.cs文件参数具体讲解

AssemblyInfo.cs文件参数具体讲解 原文地址:https://www.cnblogs.com/scy251147/archive/2010/10/23/1859576.html 在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否…
暂无图片
编程学习 ·

解决 java “错误:编码GBK 的不可映射字符”

今天一个学弟遇到这样的问题,如下图所示。 看到这样的问题,我的思考是: 1.首先是使用javac -version查看环境变量是否正确 2.然后查看编译路径是否存在中文 3.查看代码本身是否有中英文符号混淆 4.右击dos窗口,查看其属性中的编码集是否是utf-8 代码本身没问题,可以在exli…
暂无图片
编程学习 ·

数据库原理及应用教程陈志泊-第三章课后习题

一、选择题1. B 2. A 3. C 4. B 5. C 6. C7. B 8. D 9. A 10. D 11. C 12. D二、填空题1. 结构化查询语言2. 数据查询、数据定义、数据操纵、数据控制3. 外模式、模式、内模式4. 数据库、事务日志5. NULL/NOT NULL 、 UNIQUE 约束、 PRIMARY KEY 约束、 FOREIGN KEY …
暂无图片
编程学习 ·

simulink模型延时

simulink模型如果输入与输出有联系形成回路你需要做的就是加一个延时,并且注意是连续的还是离散的
暂无图片
编程学习 ·

linux重要知识清单:进程管理

相关的系统调度fork(): 用于创建进程,Linux中进程的创建者与被创建者是父子关系clone():克隆,真正实现创建进程的操作,fork()是不带参数的,clone()是带参数的,通过不同的参数后,可以不仅仅做fork(),也能做其他的创建进程的方式exec():加载外部存储器的一段代码,把一个可…
暂无图片
编程学习 ·

01_第一章_数据类型_02_变量的类型决定了什么

变量的类型决定了什么 高级语言为什么要区分数据类型为了更有效地组织数据,规范数据的使用 有助于提高程序的可读性,方便用户使用在程序设计语言中引入数据类型的好处带来了程序的简明性和数据的可靠性。 有助于提高程序的执行效率,节省内存空间C语言的数据类型 基本类型整型…
暂无图片
编程学习 ·

前端性能优化

浏览器渲染机制 Html解析成DOM树,Css解析成CSS树,将DOM树与CSSDOM规则树合并在一起生成Render树,遍历渲染树开始布局,计算每个节点的位置大小信息,将渲染树每个节点绘制到屏幕阻塞渲染当浏览器遇到一个script标记时,DOM构建将暂停,直至脚本完成执行,然后继续构建DOM。每…
暂无图片
编程学习 ·

数据结构-字典

字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对 哈希表 哈希表由dict.h/dictht结构定义 typedef struct dictht {// 哈希表数组dictEntry **table;// 哈希表大小unsigned long size;// 哈希表大小掩码,用于计算…
暂无图片
编程学习 ·

RocketMQ Remoting模块系列之NettyRemotingServer源码浅析

写在前面RocketMQ Remoting模块也是整个代码中比较简单的一个模块,在掌握基本的Netty知识之后就可以尝试对源码进行简单的阅读分析,我也是结合源码分析来进行Netty应用的学习。该模块主要有两个类 NettyRemotingServer 和 NettyRemotingClient 。分别对应服务端和客户端,服务…
暂无图片
编程学习 ·

Transformer

Transformer是谷歌大脑在2017年底发表的论文attention is all you need中所提出的seq2seq模型。现在已经取得了大范围的应用和扩展,而BERT就是从Transformer中衍生出来的预训练语言模型 这篇文章分为以下几个部分Transformer直观认识 Positional Encoding Self Attention Mech…
暂无图片
编程学习 ·

叩丁狼开发工程师:SSR服务架构特点分析

叩丁狼开发工程师:SSR服务架构特点分析SSR服务架构是我们在搭建一些开放性平台的时候需要添加的一项功能应用,而今天成都软件开发工程师就通过案例分析来了解一下,关于SSR服务架构的特点都有哪些内容?1、抵抗单页面大流量 要抵抗单页面的大流量,先我们自然而然会想到会使用…