java springboot项目树结构递归查询
记录工作
本文记录树结构递归查询,像菜单栏和部门
首先需要一张表
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项目树结构递归查询的更多相关文章
- 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...
- JAVA - SpringBoot项目引用MyBatis操作数据库
JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...
- JAVA - SpringBoot项目引用generator生成 Mybatis文件
JAVA - SpringBoot项目引用generator生成 Mybatis文件 在spring官网https://start.spring.io/自动生成springboot项目,这里选择项目 ...
- Java SpringBoot 项目构建 Docker 镜像调优实践
PS:已经在生产实践中验证,解决在生产环境下,网速带宽小,每次推拉镜像影响线上服务问题,按本文方式构建镜像,除了第一次拉取.推送.构建镜像慢,第二.三-次都是几百K大小传输,速度非常快,构建.打包.推 ...
- JAVA SpringBoot 项目打包(JAR),在打包成 docker 镜像的基本方法
1,打包 SpringBoot 项目,使用 IDEA 如下图 2,将 JAR 包上传到安装了 Docker 的 linux 服务器上,并且在相容目录下创建一个名为 Dockerfile 的文件 3,在 ...
- JAVA - SpringBoot项目跨域访问
JAVA - SpringBoot添加支持CORS跨域访问 CORS(Cross-Origin Resource Sharing)“跨域资源共享”,是一个W3C标准,它允许浏览器向跨域服务器发送Aja ...
- JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处 ...
- Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...
- docker安装部署、fastDFS文件服务器搭建与springboot项目接口
一.docker安装部署 1.更新yum包:sudo yum update 2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动 ...
- idea启动springboot项目 报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader()Ljava/lang/ClassLoader;
有一次启动springboot项目的时候,报了一个非常奇怪的错误,说是找不到servletContext,springboot不是自带tomcat的吗? 在网上找了好久,说是用以下方式解决. 解决方式 ...
随机推荐
- [Leetcode]完全平方数
题目 代码 class Solution { public: int numSquares(int n) { vector<int> dp(n + 1, INT_MAX); dp[0] = ...
- [Unity]限制一个值的大小(Clamp以及Mathf)
如何限制一个物体的运动范围? 代码实例 public float xMin, xMax, zMin, zMax; rigidbody.position = new Vector3( Mathf.Cla ...
- 如何在 Nuxt 3 中使用 wavesurfer.js
安装 wavesurfer.js 在项目中安装 wavesurfer.js npm install --save wavesurfer.js 常规方式引入 如果你的根目录中没有 components ...
- 基于 VScode 搭建 Verilog 自动格式化
插件 Verilog-HDL/SystemVerilog/Bluespec SystemVerilog SystemVerilog and Verilog Formatter 工具 https://g ...
- Blazor Pdf Reader PDF阅读器 组件 更新
Blazor Pdf Reader PDF阅读器 组件 https://www.nuget.org/packages/BootstrapBlazor.PdfReader#readme-body-tab ...
- Grafana 系列文章(二):使用 Grafana Agent 和 Grafana Tempo 进行 Tracing
️URL: https://grafana.com/blog/2020/11/17/tracing-with-the-grafana-cloud-agent-and-grafana-tempo/ ✍A ...
- 一小时学会微信小程序
一小时学会微信小程序 目录 一.小程序概要 1.1.发展历史 1.2.小程序的诞生 二.微信小程序介绍 三.开发微信小程序的软件下载与初步配置 3.1.获取微信小程序的AppID 3.2.下载安装微 ...
- 数据同步gossip协议原理与应用场景介绍
作者:京东物流 冯鸿儒 1 简介 Gossip是一种p2p的分布式协议.它的核心是在去中心化结构下,通过将信息部分传递,达到全集群的状态信息传播,传播的时间收敛在O(Log(N))以内,其中N是节点的 ...
- C#IIS上传文件大小设置问题:maxRequestLength、maxAllowedContentLength
system.web节点下的 maxRequestLength属性来指定最大上传文件的size,默认值是4M <system.web> <httpRuntime maxRequest ...
- TCP/IP协议(8): ICMP(Internet Control Message Protocol) 协议 ——诊断和控制 IP 协议层
TCP/IP协议(8): ICMP(Internet Control Message Protocol) 协议 --诊断和控制 IP 协议层 关于网际控制报文协议(Internet Control M ...