1.在DAO中的实现代码:

public List<TreeResult> parseMenuTree(List<TreeResult> list){List<TreeResult> result = new ArrayList<>();//1.获取第一个节点for (TreeResult menu:list) {if(null == menu.getParentId()){result.add(menu);}}//2.获取递归子节点for (TreeResult parent:result) {parent = menuChild(parent,list);}return result;
}public TreeResult menuChild(TreeResult parent,List<TreeResult> list){for (TreeResult menu:list) {if(Objects.equals(parent.getId(),menu.getParentId())){parent.getChildren().add(menu);menu = menuChild(menu,list);}}return parent;
}

2.在Controller中的实现代码:

@ApiOperation(value = "动态菜单", httpMethod = "POST", produces = "application/json;charset=UTF-8")
@ApiImplicitParam(value = "token", name = "token", dataType = "String", paramType = "header")
@PostMapping("/api/menu/tree")
public Result menuTree(HttpServletRequest request) {Map<String, Object> map = new HashMap<>();try {User user = userService.getDao().findById(Integer.valueOf(tokenService.valid(request.getHeader("token"))));if (user == null) {return Result.fail(902, "用户登录失效,请重新登录");}if (Enums.UserType.Driver == user.getType()) {return Result.fail(903, "该用户没有权限");}if (Enums.UserType.Passenger == user.getType()) {return Result.fail(903, "该用户没有权限");}//根据用户对应的角色获取角色对应的菜单idList<Integer> integers = roleAndMenuService.getDao().findByRoleId(user.getRoles());List<String> list = integers.stream().map(x -> x + "").collect(Collectors.toList());String menus = String.join(",", list);//根据菜单id获取对应的菜单List<TreeResult> tree = menuService.getDao().findTree(menus);//将菜单列表转成树结构List<TreeResult> treeResults = menuService.getDao().parseMenuTree(tree);map.put("list", treeResults);return Result.ok(map);} catch (Exception e) {e.printStackTrace();return Result.fail(901, e.getMessage());}
}

3.TreeResult实体类:

@Getter
@Setter
public class TreeResult {private Integer id;private String icon;private String menuName;private String menuType;private String menuUrl;private Integer parentId;private List<TreeResult> children = new ArrayList<TreeResult>();}

Java实现查询菜单返回树结构相关推荐

  1. java oracle查询结果list取数,Oracle函数返回Table集合

    Oracle table()函数查询函数返回的结果集 2015年12月13日 22:42:51 warrenjiang 阅读数:7452 版权声明:本文为博主原创文章,未经博主允许不得转载. http ...

  2. java文件流插入数据库_使用Java流查询数据库

    java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起. ...

  3. 以下关于java的GUI菜单描述_第十九讲 菜单和JavaGUI综合设计

    第十九讲菜单和JavaGUI综合设计 主要内容 菜单(JMenuBar.JMenu.JmenuItem) 菜单项的事件侦听处理 颜色选择器JColorChooser 文件选择器JFileChooser ...

  4. java json自定义_java返回json设置自定义的格式

    springMvc返回Json中自定义日期格式 (一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annota ...

  5. Java数据库查询简介

    利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...

  6. java实现多级菜单(java递归)方法一

    查询菜单树 public List<Map<String, Object>> queryCategoryInfo() {List<Map<String, Objec ...

  7. java流写入数据库_使用Java流查询数据库

    java流写入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够使用现有数据库中的数据,而无需编写一行SQL(或类似的语言,如HQL),而无需花费数小时将所有内容放在一起. 准备好 ...

  8. 使用Java流查询数据库

    在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写单行SQL(或类似的语言,例如HQL),也无需花费数小时将所有内容放在一起. 准备好应用程序之后,您将通 ...

  9. java中如果需要返回多个值怎么办

    Java中如果需要返回多个值怎么办 首先我们明确一下:java方法的返回值只有一个,但是返回值的类型不限 有一种编程语言可以返回多个值 Python,实例如下:  运行结果如下: [whuang@hu ...

最新文章

  1. CentOS 6.3定制自动安装
  2. eclipse java8报错_eclipse4.3安装支持Java8插件,之后就报错无法打开eclipse,求解?
  3. 你是否应该成为一名全栈工程师?
  4. php 编写mysql,自己写的MySQL类
  5. 【渝粤题库】国家开放大学2021春1400机器人技术及应用题目
  6. 【JQGRID DOCUMENTATION】.学习笔记.5.Form Editing
  7. mybatis parametertype 多个参数
  8. WinForm中WebBrowser的使用
  9. Spring @RestController、@Controller区别
  10. 机器学习交易——如何使用回归预测股票价格?【翻译】
  11. pandas之在Excel上绘制柱形图
  12. 宝塔面板如何部署Java项目教程【新版】
  13. 使用Microsoft R Server进行机器学习和模型发布(2)
  14. flex builder 4.6 for Apple iOS应用程序打包(MAC)
  15. Typora中插入分页符
  16. 第七章 变量进阶与点阵LED 练习题
  17. vue3如何使用svg图片
  18. hive:建库建表、表分区、内部表外部表、数据导入导出
  19. 我发布在Steam的两款游戏
  20. bat计算机清理原理,科技教程:电脑如何一键清除垃圾bat

热门文章

  1. TQ210裸机编程(2)——LED流水灯
  2. Android UI开发第三十三篇——Navigation Drawer For Android API 7
  3. MFC 字符串截取成数组 wcstok
  4. mysql定时器每月执行一次_MySQL定时器可以设置执行次数吗
  5. canopen c++程序编写_JAVA、C、C++、Python同样是高级语言,为什么只有C和C++可以编写单片机程序?...
  6. 面向dba的linux shell 脚本简介,面向dba的linuxshell脚本简介.doc
  7. springboot actuator_Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控...
  8. 壳体有矩理论与实用计算机方法,《薄壳计算和理论》.pdf
  9. csharp为何不流行_【经营】做餐饮,算好加减法,你不赚谁赚
  10. 3.依赖注入 spring_di