记录工作

本文记录树结构递归查询,像菜单栏和部门

首先需要一张表

CREATE TABLE `sys_dict` (
`id` int NOT NULL AUTO_INCREMENT,
`parent_id` int NOT NULL,
`name` varchar(100) COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
INSERT INTO sys_dict (parent_id,name) VALUES
(0,'中国'),
(1,'云南省'),
(1,'四川省'),
(1,'广西省'),
(1,'贵州省'),
(1,'广东省'),
(2,'昆明市'),
(2,'文山市'),
(2,'红河州'),
(2,'玉溪市');
INSERT INTO sys_dict (parent_id,name) VALUES
(3,'成都市'),
(3,'广都市'),
(3,'绵阳市'),
(3,'南充市'),
(4,'桂林市'),
(5,'贵阳市'),
(6,'东莞市'),
(7,'五华区'),
(8,'砚山县');

接下来就是实体类啦

package com.example.demotest.entity;

import lombok.Data;

import java.util.List;

/**
* Description :
* Copyright : Copyright (c) 2022
* Company :
*
* @author Dshzs月
* @version 1.0.0
* @createTime 2022年11月29日 13:55:00
*/
@Data
public class SysDict { private String id; private String parentId; private String orgName; /** 子类菜单数据 */
private List<SysDict> childMenu;
}

后面接controller

    @GetMapping("/menu")
public List<SysDict> findMenu() {
return recursionService.findMenu();
}
@Service
public class RecursionServiceImpl implements RecursionService { @Autowired
private RecursionMapper recursionMapper; @Override
public List<KeyValueItemVo> tree() {
List<SysDict> dictList = recursionMapper.list();
List<KeyValueItemVo> resultList = new ArrayList<>();
dictList.forEach(oneLevelDict -> {
KeyValueItemVo result = new KeyValueItemVo(oneLevelDict.getId(), oneLevelDict.getOrgName());
// 3、递归整理子级字典
result.setItems(getChildren(oneLevelDict.getParentId(), dictList));
resultList.add(result);
});
return resultList;
} private SysDict getMenuTree(SysDict result, List<SysDict> list) {
for (SysDict menu : list) {
//如果父类主键等于传过来实体类的ID
if (Objects.equals(menu.getParentId(), result.getId())) {
if (result.getChildMenu() == null) {
result.setChildMenu(new ArrayList<>());
}
// 递归调用
result.getChildMenu().add(getMenuTree(menu, list));
}
}
return result;
}

到此本文就结束了

java springboot项目树结构递归查询的更多相关文章

  1. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...

  2. JAVA - SpringBoot项目引用MyBatis操作数据库

    JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...

  3. JAVA - SpringBoot项目引用generator生成 Mybatis文件

    JAVA - SpringBoot项目引用generator生成 Mybatis文件  在spring官网https://start.spring.io/自动生成springboot项目,这里选择项目 ...

  4. Java SpringBoot 项目构建 Docker 镜像调优实践

    PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推拉镜像影响线上服务问题,按本文方式构建镜像,除了第一次拉取.推送.构建镜像慢,第二.三-次都是几百K大小传输,速度非常快,构建.打包.推 ...

  5. JAVA SpringBoot 项目打包(JAR),在打包成 docker 镜像的基本方法

    1,打包 SpringBoot 项目,使用 IDEA 如下图 2,将 JAR 包上传到安装了 Docker 的 linux 服务器上,并且在相容目录下创建一个名为 Dockerfile 的文件 3,在 ...

  6. JAVA - SpringBoot项目跨域访问

    JAVA - SpringBoot添加支持CORS跨域访问 CORS(Cross-Origin Resource Sharing)“跨域资源共享”,是一个W3C标准,它允许浏览器向跨域服务器发送Aja ...

  7. JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处 ...

  8. Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...

  9. docker安装部署、fastDFS文件服务器搭建与springboot项目接口

    一.docker安装部署 1.更新yum包:sudo yum update 2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动 ...

  10. idea启动springboot项目 报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;

    有一次启动springboot项目的时候,报了一个非常奇怪的错误,说是找不到servletContext,springboot不是自带tomcat的吗? 在网上找了好久,说是用以下方式解决. 解决方式 ...

随机推荐

  1. DNS欺骗:网站克隆实现网站钓鱼攻击

    1 DNS 1.1 DNS是什么? 域名系统(Domain Name System)是互联网使用的命名系统,用来将主机域名转换为 ip 地址,属于应用层协议,使用 UDP 传输. 1.2 为什么需要D ...

  2. 基础分类算法_KNN算法

    KNN(K-NearestNeighbor)算法 KNN算法是有监督学习中的分类算法. KNN算法很特殊,可以被认为是没有模型的算法,也可以认为其训练数据集就是模型本身. KNN算法的原理 KNN的原 ...

  3. C# 线程查漏补缺

    进程和线程 不同程序执行需要进行调度和独立的内存空间 在单核计算机中,CPU 是独占的,内存是共享的,这时候运行一个程序的时候是没有问题.但是运行多个程序的时候,为了不发生一个程序霸占整个 CPU 不 ...

  4. 12月23日内容总结——csrf跨站请求伪造、校验策略、相关装饰器,auth认证模块及相关操作,拓展auth_user表

    目录 一.csrf跨站请求伪造 概念引入 概念讲解 二.csrf校验策略 概念讲解 form表单操作csrf策略 ajax请求csrf策略 三.csrf相关装饰器 四.auth认证模块 五.auth认 ...

  5. Jenkins CLI命令行

    Jenkins CLI命令行 jenkins不光可以UI操作还提供了命令行接口 位置 首页->系统管理->工具和动作->Jenkins 命令行接口 在这个界面下载一个jenkins- ...

  6. HTTP协议拓展

    本文详细介绍了 HTTPS 相较于 HTTP 更安全的原因,包括对称加密.非对称加密.完整性摘要.数字证书以及 SSL/TLS 握手等内容,图文并茂.理论与实战结合.建议收藏! 1. 不安全的 HTT ...

  7. 把Excel自动转换Json格式

    Excel表格转JSON      在实际工作中,我们常常使用Excel记录各种数据,但在各种应用系统传输数据却使用JSON格式,这就需要把Excel转为JSON.如果能把数据转换传输过程自动化就更完 ...

  8. 关于移动端使用echarts点击图标外部不能关闭tooltip的问题

    新建一个mixin文件  粘贴如下代码: 1 /** 2 * 1. 需要将echart实例赋值为 this.echartsInstance `echartsInstance` echarts 带s 3 ...

  9. JZOJ 3423.Vani和Cl2捉迷藏 & [CTSC2008]祭祀

    \(\text{Problem}\) 求一个 \(DAG\) 的最长反链 \(\text{Solution}\) 由 \(Dilworth\) 定理只最长反链等于最小链覆盖 而原图的链是可相交的,所以 ...

  10. CCRD_TOC_2007年10月_总第11期

    中信国健临床通讯 2007年10月, 总第11期    目 录 1. Etanercept可以缓解反应性和未分化关节炎患者的疼痛和滑膜炎症 Flagg SD, et al Arthritis Rheu ...