一、需求说明

在做项目的时候前台要显示一个树形目录,比如下面这样:

二、添加数据库表

1、创建数据库表

2、添加测试数据

三、后端代码实现

PS:该测试类中的create_time和update_time写在BaseEntity中,可以忽略!!!

1、创建实体类

@TableName(value ="menu")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Menu extends BaseEntity implements Serializable {/*** 主键ID*/@TableId(type = IdType.AUTO)private Integer id;/*** 菜单名称*/private String name;/*** 父id*/private Integer parentId;/*** 子节点信息*/@ApiModelProperty("子节点信息")public List<Menu> childList;@TableField(exist = false)private static final long serialVersionUID = 1L;
}

2、添加实现类

(1)添加一个查询所有数据接口

    public List<Menu> searchAll() {return menuMapper.searchAll();}
    <select id="searchAll" resultType="com.atjava.mybatisx.pojo.Menu">select * from menu</select>

实现方法一:

    public List<Menu> searchTreeMenu() {List<Menu> menus = searchAll();List<Menu> TreeMenu = menus.stream().filter(m -> m.getParentId() == 1).map((m) -> {m.setChildList(getChildrens(m,menus));return m;}).collect(Collectors.toList());return TreeMenu;}private List<Menu> getChildrens(Menu root, List<Menu> all) {List<Menu> children = all.stream().filter(m -> {return Objects.equals(m.getParentId(), root.getId());}).map((m) -> {m.setChildList(getChildrens(m, all));return m;}).collect(Collectors.toList());return children;}

实现方法二:

public List<Menu> searchTreeMenu() {List<Menu> menus = searchAll();List<Menu> roots = new ArrayList<>();List<Menu> TreeMenu = new ArrayList<>();//获取最外层集合for (Menu menu : menus) {//0代表最高用户if (menu.getParentId() == 0) {roots.add(menu);}}//从最高级别用户开始遍历,递归找到该用户的下级用户,将带有下级的最高级用户放入返回结果中for (Menu root : roots) {root = buildUserTree(menus, root);TreeMenu.add(root);}return TreeMenu;}public Menu buildUserTree(List<Menu> allMenus, Menu menu) {List<Menu> children = new ArrayList<>();for (Menu menu1 : allMenus) {//0代表根节点,无需重复比较if (menu1.getParentId() == 0)continue;//当前用户的上级编号和传入的用户编号相等,表示该用户是传入用户的下级用户if (menu1.getParentId() == menu.getId()) {//递归调用,获取该用户的下级用户menu1 = buildUserTree(allMenus, menu1);children.add(menu1);}}//给该用户的children属性赋值,并返回该用户menu.setChildList(children);return menu;}

3、添加请求接口

@Api(tags = "菜单管理")
@RestController
@RequestMapping("/menu")
public class MenuController {@AutowiredMenuService menuService;@ApiOperation("获取树形菜单")@GetMapping("/searchTreeMenu")public ResponseResult<Menu> searchTreeMenu(){List<Menu> menus = menuService.searchTreeMenu();return ResponseResult.ok(menus);}}

四、使用swagger测试

java如何返回树形结构相关推荐

  1. java读取文件目录返回树形结构

    为实现读取文件目录下的文件信息,生成树形结构,以方便前端做一些展示 1.结构实体类 package cn.cnic.instdb.model.system;import lombok.Data; im ...

  2. Mybatis返回树形结构

    在返回json数据时常常需要返回树形的结构,自己去写递归来构建树的话又太麻烦了. 下面介绍一种使用mybatis来返回树形结构的好方法 表结构展示 表里面需要记录父级Id MyBatis一对多coll ...

  3. Java返回树形结构的数据 (children方式)

    以children这种方式的实体类来遍历子父级的树形结构. //问题分类下拉表 @Override public List<DA> selectDA(Long deptId,Long us ...

  4. java 树结构递归设计,java实现递归树形结构

    数据结构递归树,数据结构递归算法,数据结构递归,数据结构递归运算,考研数据结构考递归,数据结构递归回溯,js递归树形数据结构,数据结构分治,递归变非递归用什么数据结构...... 通过函数递归调用来实 ...

  5. java中dom树形结构_DOM树的结构

    转载于:http://hi.baidu.com/leexper/blog/item/1c47f1112c1d3676ca80c4a9.html 一.引言 XML 是eXtensible Markup ...

  6. java 集合封装树形结构

    本例父子关系,子节点的parentId和父节点的id相同. 实现树形排列的方法 public static List<Type> buildTree(List<Type> tr ...

  7. java web mysql树形结构_用JAVA写的树结构代码 - WEB源码|JSP源码/Java|源代码 - 源码中国...

    压缩包 : 18743599Netbeanjtree.rar 列表 Netbeanjtree/jtree/build/built-jar.properties Netbeanjtree/jtree/b ...

  8. Java实现返回的数据为树形结构

    1.实体类为: id:主键 name:名字 parent_id:父id grade:等级 根据list中的实体类数据返回树形结构,代码如下: public class TSystemTreeUtil ...

  9. java组装树状结构数据集合_JAVA构建List集合为树形结构

    package com.zving.tree; import java.util.ArrayList; import java.util.List; /** * 树形结构实体类 * @author c ...

最新文章

  1. 对 Jenkins+ANT+Jmeter 接口测试的实践
  2. 自然语言处理-Word2Vec
  3. python中module用法_Python学习之module用法
  4. 【Caffe实践】基于Caffe的人脸检测实现
  5. matlab mobilenet v2,MobileNetV2-SSDLite代码分析-6 VOC Dataset
  6. 前端面试每日 3+1(每日三问)
  7. Maven的Settings.xml配置文件解释
  8. 如何证明CPU缓存行cacheline的存在?
  9. 我的第一本算法书(图解算法)——什么是哈希表
  10. 大数据分析方法管不管用
  11. 【定时任务|开机启动】Windows Server 2008/2012 计划任务配置(任务计划程序)每分钟执行BAT...
  12. 从JimmyNews有感于互联网的传播能力
  13. 计算机十六进制ABCD,16进制计算(十六进制计算器在线)
  14. 调用QQ与陌生人聊天
  15. 基于Python的冬奥会领域问答机器人设计
  16. 2022年莆田市高新技术企业申报奖励补贴,高企认定条件以及申报材料汇总
  17. HASH和HMAC(4):SHA-224和SHA-256算法原理
  18. 百度编辑器上传视频配置
  19. 【瞎搞】在nas上搭建qbittorrent
  20. 品牌创建百科怎么写?品牌百度百科怎么创建?

热门文章

  1. React如何快速上手
  2. 【深度相机系列七】深度相机应用全面梳理:多点开花,定点爆破
  3. 软件项目测试的具体内容
  4. 基于JAVA携手同游旅游社交平台计算机毕业设计源码+系统+数据库+lw文档+部署
  5. 讨论 如何带领好新的员工
  6. linux终端任务中止,[mcj]利用screen解决ssh连接shell终端断开之后任务终止的问题
  7. Java查询个人信息
  8. AMI legacy BIOS里添加2个VBIOS的问题
  9. Python入门练习判断题
  10. 【单片机笔记】上海移远公司NB-IOT模组 BC26 使用STM32 AT命令实现连接阿里云数据上传和下载