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的吗? 在网上找了好久,说是用以下方式解决. 解决方式 ...
随机推荐
- Java安全之JDBC Attacks学习记录
Java安全之JDBC Attacks 写在前面 很早就看到了Make JDBC Attacks Brilliant Again议题,一直想分析学习下,但是太懒. MySQL 原理概述 "扩 ...
- Postman实现UI自动化测试
转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/1db4fa44.html 你好,我是测试蔡坨坨. 看到这篇文章的标题,是不是有小伙伴会感到惊讶呢? Postman不是做接口 ...
- 实操好用~~~~~antd 中 Table表格动态合并~~~
我写了两种方法 一种是前端处理数据渲染 一种是后端处理数据渲染 数据结构略有不同 下面上代码 <template> <page-view :title="title&quo ...
- 一个项目配置多个GIT仓库,一个项目自由上传码云和GITHUB
- 今日实际操作----Dart Mac开发与运行环境配置 配置.bash_profile
Mac 打开.编辑 .bash_profile 文件 一般在Mac上配置环境变量时经常要创建.编辑 .bash_profile文件.创建该文件时一般都会选择在当前用户目录下,即Mac下的.bash_p ...
- npm 中设置环境NODE_ENV变量,判断失败打印process.env.NODE_ENV确实是"development",但是判断process.env.NODE_ENV === "development" 是false
通过package.json 的scripts脚本 修改NODE_ENV的值来区分开发环境和生产环境. "scripts": { "build": " ...
- 委派模式——从SLF4J说起
作者:vivo 互联网服务器团队- Xiong yangxin 将某个通用解决方案包装成成熟的工具包,是每一个技术建设工作者必须思考且必须解决的问题.本文从业内流行的既有工具包入手,解析实现思路,沉淀 ...
- 字节输出流的续写和换行-字节输入流_inputS Stream类
字节输出流的续写和换行 package demo02.OutputStream; import java.io.FileOutputStream; import java.io.IOException ...
- MyBatis-Plus修改数据,会不会把其他字段置为null
前两天在用MyBatis-Plus写了一张单表的增删改查,在写到修改的时候,就突然蹦出一个奇怪的想法. MyBatis-Plus的BaseMapper中有两个关于修改的方法.如下: int updat ...
- 注解 @RequestMapping @RequestParam @RequestBody
@RequestMapping @RequestParam @RequestBody @PathVariable与@RequestParam的区别 1) 相同点A. 作用位置相同:都是直接修饰方法参 ...