千家信息网

Java递归如何实现菜单树

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章将为大家详细讲解有关Java递归如何实现菜单树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。pom文件
千家信息网最后更新 2025年01月18日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递归如何实现菜单树"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

菜单 递归 文件 篇文章 名称 方法 更多 查询 配置 不错 实用 最高 全局 内容 层次 数据 数据库 文章 知识 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器提升 内网ntp时间服务器 河南知名软件开发报价 节后网络安全工作简报 合肥众信网络技术有限公司 手机网络安全防护怎么关 lisp创建数据库 数据库系统软件的定义 宁国自动软件开发服务参考价格 美团软件开发福州 服务器升级后无法进入桌面 昌平区网络技术软件 给数据库中已有字段添加数据 街霸5为什么不能登陆服务器 共享电动车还车显示服务器异常 商洛网络技术产品介绍 超星数字图书馆数据库的结果分析 银川展厅多媒体软件开发公司 阿里云神龙架构服务器设置 子账号用户角色权限数据库 云服务器如何保证安全 访问excel数据库 长沙石油软件开发报价 医院信息系统his数据库 gt7赛车无法与服务器建立连接 特斯拉中国数据服务器 泉州直播带货软件开发 国家网络安全管理工作部署 forger怎么安装在服务器上 考研密码学与网络安全复习资料
0