千家信息网

Java递归如何实现菜单树

发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,这篇文章将为大家详细讲解有关Java递归如何实现菜单树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。pom文件
千家信息网最后更新 2024年10月23日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 List menuChildren;}

xml文件

            

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 {    List selectByPid(Integer pid);    List selectAll();    List 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 {    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 ServiceImpl implements 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递归如何实现菜单树"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0