Java递归如何实现菜单树
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关Java递归如何实现菜单树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。pom文件
千家信息网最后更新 2026年11月03日Java递归如何实现菜单树
这篇文章将为大家详细讲解有关Java递归如何实现菜单树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
pom文件
4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE com.example demo 0.0.1-SNAPSHOT demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-test test org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.1 mysql mysql-connector-java runtime com.github.pagehelper pagehelper-spring-boot-starter 1.3.0 org.projectlombok lombok true com.baomidou mybatis-plus-boot-starter 3.4.2 org.springframework.boot spring-boot-maven-plugin
application.yaml文件
spring: datasource: url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&serverTimezone=CTT username: root password: 2020 driver-class-name: com.mysql.cj.jdbc.Driverpagehelper: helperDialect: mysql reasonable: true # 修改默认值# mybatis-plus配置mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl typeAliasesPackage: com.qcby.entity mapperLocations: classpath:mapper/*.xml # 全局配置id自增 => global-config: db-config: id-type: auto
数据库表设计如下
SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for menu-- ----------------------------DROP TABLE IF EXISTS `menu`;CREATE TABLE `menu` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '名称', `pid` bigint(20) DEFAULT NULL COMMENT '父级id', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Compact;-- ------------------------------ Records of menu-- ----------------------------INSERT INTO `menu` VALUES (1, '主菜单1', 0);INSERT INTO `menu` VALUES (2, '主菜单2', 0);INSERT INTO `menu` VALUES (3, '主菜单3', 0);INSERT INTO `menu` VALUES (4, '菜单1.1', 1);INSERT INTO `menu` VALUES (5, '菜单1.2', 1);INSERT INTO `menu` VALUES (6, '菜单1.1.1', 4);INSERT INTO `menu` VALUES (7, '菜单2.1', 2);INSERT INTO `menu` VALUES (8, '菜单2.2', 2);INSERT INTO `menu` VALUES (9, '菜单1.1.2', 4);SET FOREIGN_KEY_CHECKS = 1;
菜单类
package com.qcby.entity;import lombok.Data;import java.util.List;@Data//lombok实现简化 get、set、tostring方法public class Menu { // 菜单id private String id; //菜单名称 private String name; // 父菜单id private String pid; // 子菜单 private Listxml文件
Mapper层
package com.qcby.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.qcby.entity.Menu;import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapperpublic interface MenuMapper extends BaseMapper
service层
package com.qcby.service;import com.baomidou.mybatisplus.extension.service.IService;import com.qcby.entity.Menu;import java.util.List;public interface MenuService extends IService{ List selectByPid(Integer pid); List selectAll(); List selectAllNotBase();}
serviceImpl
package com.qcby.service.Impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.qcby.entity.Menu;import com.qcby.mapper.MenuMapper;import com.qcby.service.MenuService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class MenuServiceImpl extends ServiceImplimplements MenuService { @Autowired private MenuMapper menuMapper; @Override public List selectByPid(Integer pid) { return menuMapper.selectByPid(pid); } @Override public List selectAll() { return menuMapper.selectAll(); } @Override public List selectAllNotBase() { return menuMapper.selectAllNotBase(); }}
controller层
package com.qcby.controller;import com.baomidou.mybatisplus.core.toolkit.StringUtils;import com.qcby.entity.Menu;import com.qcby.mapper.MenuMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;import java.util.List;@RestController@RequestMapping("menu")public class MenuController { @Autowired private MenuMapper menuMapper; @RequestMapping("/getMenuTree") public List getMenuTree(){ List menusBase = menuMapper.selectByPid(0); List menuLNotBase = menuMapper.selectAllNotBase(); for (Menu menu : menusBase) { List menus = iterateMenus(menuLNotBase, menu.getId()); menu.setMenuChildren(menus); } return menusBase; } /** *多级菜单查询方法 * @param menuVoList 不包含最高层次菜单的菜单集合 * @param pid 父类id * @return */ public List iterateMenus(List menuVoList,String pid){ List result = new ArrayList(); for (Menu menu : menuVoList) { //获取菜单的id String menuid = menu.getId(); //获取菜单的父id String parentid = menu.getPid(); if(StringUtils.isNotBlank(parentid)){ if(parentid.equals(pid)){ //递归查询当前子菜单的子菜单 List iterateMenu = iterateMenus(menuVoList,menuid); menu.setMenuChildren(iterateMenu); result.add(menu); } } } return result; }} 结果展示

关于"Java递归如何实现菜单树"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
菜单
递归
文件
篇文章
名称
方法
更多
查询
配置
不错
实用
最高
全局
内容
层次
数据
数据库
文章
知识
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
广东猪兼强互联网科技有限公司
湖南永感互联网科技有限公司
金融科技创新监管互联网金融
互联网科技公司电话
互联网科技论文
新浪科技互联网
互联网科技博客
互联网科技公司做什么
创业天下互联网科技有限公司
上海宁丞科技互联网
昊天互联网科技有限公司
晓花互联网科技有限公司网址
互联网科技公司营业执照怎么办理
山东有哪些互联网科技公司
高科技互联网套路
互联网科技资金流入
浙南科技城互联网大厦招聘
南京一网一红互联网科技有限公司
互联网科技企业文化
伟宏互联网科技
为想互联网科技
赫美联合互联网科技
互联网高科技股票
随着互联网科技发展
天津腾达互联网科技有限公司
科技互联网海报
陕西云淼互联网科技公司
互联网科技包装股
全球科技与互联网公司市值变化