您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
这篇文章将为大家详细讲解有关Java递归如何实现菜单树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <!-- 可选修改:之前的一些案例按照此版本搭建 --> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- spring boot 整合mybatis的核心依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <!-- 数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--pageHelper分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <!-- 引入lombok,简化pojo类--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 引入Mybatis plus 依赖 增强mybatis--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
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.Driver pagehelper: 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 List<Menu> menuChildren;
}xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qcby.mapper.MenuMapper">
<select id="selectByPid" resultType="com.qcby.entity.Menu">
SELECT * FROM menu WHERE pid=#{pid}
</select>
<select id="selectAll" resultType="com.qcby.entity.Menu">
SELECT * FROM menu
</select>
<select id="selectAllNotBase" resultType="com.qcby.entity.Menu">
SELECT * FROM menu where pid!= 0
</select>
</mapper>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;
@Mapper
public interface MenuMapper extends BaseMapper<Menu> {
List<Menu> selectByPid(Integer pid);
List<Menu> selectAll();
List<Menu> selectAllNotBase();
}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<Menu> {
List<Menu> selectByPid(Integer pid);
List<Menu> selectAll();
List<Menu> 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;
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
@Autowired
private MenuMapper menuMapper;
@Override
public List<Menu> selectByPid(Integer pid) {
return menuMapper.selectByPid(pid);
}
@Override
public List<Menu> selectAll() {
return menuMapper.selectAll();
}
@Override
public List<Menu> 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<Menu> getMenuTree(){
List<Menu> menusBase = menuMapper.selectByPid(0);
List<Menu> menuLNotBase = menuMapper.selectAllNotBase();
for (Menu menu : menusBase) {
List<Menu> menus = iterateMenus(menuLNotBase, menu.getId());
menu.setMenuChildren(menus);
}
return menusBase;
}
/**
*多级菜单查询方法
* @param menuVoList 不包含最高层次菜单的菜单集合
* @param pid 父类id
* @return
*/
public List<Menu> iterateMenus(List<Menu> menuVoList,String pid){
List<Menu> result = new ArrayList<Menu>();
for (Menu menu : menuVoList) {
//获取菜单的id
String menuid = menu.getId();
//获取菜单的父id
String parentid = menu.getPid();
if(StringUtils.isNotBlank(parentid)){
if(parentid.equals(pid)){
//递归查询当前子菜单的子菜单
List<Menu> iterateMenu = iterateMenus(menuVoList,menuid);
menu.setMenuChildren(iterateMenu);
result.add(menu);
}
}
}
return result;
}
}结果展示

关于“Java递归如何实现菜单树”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。