您好,欢迎访问一九零五行业门户网

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.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<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;@mapperpublic 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;@servicepublic 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递归如何实现菜单树的详细内容。
其它类似信息

推荐信息