首页 > 编程语言 >java springboot项目树结构递归查询

java springboot项目树结构递归查询

时间:2022-12-13 17:47:32浏览次数:44  
标签:java springboot 递归 树结构 menu List private result id

记录工作

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

首先需要一张表

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,递归,树结构,menu,List,private,result,id
From: https://www.cnblogs.com/Dshzs17/p/16979433.html

相关文章

  • java web 大文件上传源代码
    ​ 前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对Http协议较模糊,故这次采用渐进的方式来学习文件上传的......
  • 如何通过Java应用程序压缩PDF文档
     PDF文档是我们日常办公中使用最频繁的文档格式。但因为大多数PDF文档都包含很多页面图像或大量图片,这就导致PDF文档过大,处理起来较为麻烦。PDF文件过大,就会导致传输或者......
  • java springboot+rabbitmq+websocket 订阅展示
    记录工作需要的依赖<!--fastjson坐标--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId>......
  • SpringBoot2 静态文件路径与接口路径冲突(相同)解决方案
    事情是这样的,最近接手个项目给它底层从ssm整到springboot2+mp由于之前很多xxx.do请求而我又不想用后缀,所以就得匹配全部后缀或者无后缀(方法有很多方案自行百度)......
  • JAVA中的注解可以继承吗?
    前言注解想必大家都用过,也叫元数据,是一种代码级别的注释,可以对类或者方法等元素做标记说明,比如Spring框架中的@Service,@Component等。那么今天我想问大家的是类被继承了,注......
  • 为什么JAVA文件中只能含有一个Public类?
    为什么JAVA文件中只能含有一个Public类?java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。只能有一个pu......
  • 解决Nginx 反代 Tomcat/Springboot 出现的ContextPath, RequestURI, getScheme, Serve
    问题示例从/amp反代到/crm 请求地址: 打印信息(重复斜杠解决首页问题的,略)   能看到contextPath是tomcat自己的/crm而不是浏览器请求的/amp......
  • Java IO详解
    作者:一面千人来源:cnblogs.com/EvswardJavaI/O流是一组有顺序的,有起点和终点的字节集合。是对设备文件间数据传输的总称和抽象。在IO中涉及的设备文件包括文件、控制......
  • JavaScript中比较字符串的4种方法
    严格平等要确定字符串是否相等,可以使用严格相等运算符。如果字符串不同,则返回,如果字符串相同,则返回===false trueconsts1='learn';consts2='today';console......
  • java 导入Excel数据校验判断哪行那列
    记录工作需求是导入数据的时候需要判断哪一行是空行,或者哪一行超过限制字符,然后返回给前端做展示@PostMapping("/importExcel")@ApiOperation("导入用户")@Ap......