pom文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
<? 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文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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 |
数据库表设计如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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; |
菜单类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<? 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层
1 2 3 4 5 6 7 8 9 10 11 |
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层
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
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; } } |
结果展示
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!
原文链接:https://blog.csdn.net/m0_52012606/article/details/123780859
查看更多关于Java递归实现菜单树的方法详解的详细内容...