前台向后台请求数据时可能会希望能得到一个树结构的数据结构,方便我们前台获取和使用,也能使得数据结构清晰。这时候需要,后台将数据转化为树形结构。整体思路为:

1. 定义树形结构的实体类
2. 新建工具类,利用递归算法,将数据循环遍历并且返回
3. 在controller层,将工具类开辟空间,调用其中的递归算法

代码如下:
1,实体类

public class Tree {private String id;//主键private String parent_code;//父级编码private String tree_name;//树结构的名字private String isparent;//是否是父极private String tree_sort;//排序private String tree_img;//树结构的图片//get和set方法省略,各位自己生成
}

2,定义工具类

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MenuTreeUtil {public static Map<String,Object> mapArray = new LinkedHashMap<String, Object>(); public List<Tree> menuCommon; public List<Object> list = new ArrayList<Object>(); public List<Object> menuList(List<Tree> menu){ //controller层调用的方法   ,并将数据以list的形式返回this.menuCommon = menu; for (Tree x : menu) {   Map<String,Object> mapArr = new LinkedHashMap<String, Object>(); if(x.getIsparent().equals("true")&&x.getParent_code().equals("0")){ //判断是否为父极mapArr.put("id", x.getId()); mapArr.put("tree_name", x.getTree_name());  mapArr.put("parent_code", x.getParent_code());mapArr.put("hasChildren", x.getIsparent());mapArr.put("tree_img", x.getTree_img());mapArr.put("tree_sort", x.getTree_sort());mapArr.put("child", menuChild(x.getId()));  //去子集查找遍历list.add(mapArr); } }   return list; } public List<?> menuChild(String id){ //子集查找遍历List<Object> lists = new ArrayList<Object>(); for(Tree a:menuCommon){ Map<String,Object> childArray = new LinkedHashMap<String, Object>(); if(a.getParent_code().equals(id) ){ childArray.put("id", a.getId()); childArray.put("tree_name", a.getTree_name()); childArray.put("parent_code", a.getParent_code());childArray.put("tree_img", a.getTree_img());childArray.put("tree_sort", a.getTree_sort());childArray.put("hasChildren", a.getIsparent());childArray.put("child", menuChild(a.getId()));lists.add(childArray); } } return lists; } }

3, controller层调用(代码有删减,主要思路1,循环遍历从数据库从查询的所有数据。2,为利用工具类方法的set和get方法,将数据放到list中3,将新生成的list数据,提交给工具类)

@PostMapping(value = "/queryTree")public Object findPage() {Map<String, Object> returnMap = new HashMap<>();List<PageData> lists = regionTreeService.findRegionTreePage(pd);//所有数据未转化成树结构MenuTreeUtil menuTree = new MenuTreeUtil();//定义工具类List<Tree> lt = new ArrayList<Tree>();//定义实体类for (int i = 0; i < lists.size(); i++) {//遍历获取数据Tree t = new Tree(); //转化成对象t.setId((String) lists.get(i).get("id"));//将数据赋给实体类t.setTree_name((String) lists.get(i).get("tree_name"));t.setParent_code((String) lists.get(i).get("parent_code"));t.setIsparent((String) lists.get(i).get("isparent"));t.setTree_img((String) lists.get(i).get("tree_img"));t.setTree_sort((String) lists.get(i).get("tree_sort"));t.setIsparent((String) lists.get(i).get("isparent"));lt.add(t);}System.out.println(lt);List<Object> menuList = menuTree.menuList(lt);//所有数据转化成树结构returnMap.put("list", menuList);return returnMap;}

总体效果:

{"total": 11,"list": [{"id": "954564617615548416","tree_name": "中国","parent_code": "0","hasChildren": "true","tree_img": "/img.aaa.jpg","tree_sort": "0","child": [{"id": "954570573374636032","tree_name": "北京","parent_code": "954564617615548416","tree_img": "/img.aaa.jpg","tree_sort": "0","hasChildren": "true","child": [{"id": "954827144123908096","tree_name": "昌平","parent_code": "954570573374636032","tree_img": "/img.aaa.jpg","tree_sort": "0","hasChildren": "false","child": []},{"id": "954827187873013760","tree_name": "丰台","parent_code": "954570573374636032","tree_img": "/img.aaa.jpg","tree_sort": "10","hasChildren": "false","child": []}]},{"id": "954826845157756928","tree_name": "太原","parent_code": "954564617615548416","tree_img": "/img.aaa.jpg","tree_sort": "0","hasChildren": "true","child": [{"id": "954925121096708096","tree_name": "太原火车","parent_code": "954826845157756928","tree_img": "/img.aaa.jpg","tree_sort": "10","hasChildren": "false","child": []},{"id": "954925161051533312","tree_name": "太原景点","parent_code": "954826845157756928","tree_img": "/img.aaa.jpg","tree_sort": "10","hasChildren": "false","child": []}]},{"id": "954826941573419008","tree_name": "大同","parent_code": "954564617615548416","tree_img": "/img.aaa.jpg","tree_sort": "0","hasChildren": "true","child": [{"id": "954925603377143808","tree_name": "大同花园","parent_code": "954826941573419008","tree_img": "/img.aaa.jpg","tree_sort": "10","hasChildren": "false","child": []},{"id": "954925632135364608","tree_name": "大同火车站","parent_code": "954826941573419008","tree_img": "/img.aaa.jpg","tree_sort": "10","hasChildren": "false","child": []}]}]}]
}

后台数据转树形结构返回前台相关推荐

  1. java父子表_Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级...

    在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示.本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结 ...

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

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

  3. JavaScript中的扁平化数据转换为树形结构、树形结构扁平化数据

    1. 扁平化数据 ---- > 树形结构 1.1 第一种数据类型 原始数据只有id和pId相互关联 let data = [{ id: 639, name: "商品管理", ...

  4. JavaScript将扁平化数据转为树形结构

    首先给你一个数组list如下: var arr = [{ name: '权限管理', id: 1, parentId: 0 },{ name: '角色管理', id: 1000, parentId: ...

  5. java实现处理无限层级树形结构

    树形结构在实际业务中是很经常遇到的,比如说机构.菜单.部门等等业务就会经常遇到层级关系.一般层级处理,有两种方式 (1)将所有的数据返回给前端,由前端处理,组装成树形结构,别担心,前端有组件的,只要后 ...

  6. vue绑定后台数据ajax,vueJS 获取后台数据 绑定data

    //vue 环境安装 http://blog.csdn.net/u013182762/article/details/53021374 一开始使用安装环境配置一些东西 ,后来发现太麻烦了 .  直接C ...

  7. 多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)

    一.问题研究的背景和意义 在Web应用程序开发领域,基于Ajax技术的JavaScript树形组件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项.目前市场上常见的JavaScript框 ...

  8. mysql 自连接 树形_自连接表的相关问题(树形结构)

    问题一: 自连接表肯定是相似  Id(PK),parentId(FK),name -.了 Id假如是主键的话,parentId就是外键了, 可是树形结构肯定是有根节点了,那么根节点的parentId按 ...

  9. php 实现树状组织图插件,使用jstree插件实现树形结构

    jstree的CDNJS地址的相关链接: (1):js (2):css jstree的简单使用 1:引入css 2:引入js 3:html内容: 父节点1 子节点1 子节点2 父节点2 子节点3 子节 ...

最新文章

  1. html如何打包压缩,所有css打包压缩到一个js里面
  2. Android Service 全解析
  3. Ubuntu设置root密码
  4. 总线上加三个终端电阻可以吗_汽车维修中CAN总线的常规检修方法!
  5. 人生,不过是停下在走
  6. Python—实训day8—掌握DataFrame的常用操作
  7. Angular自学笔记(?)DI提供者
  8. 将编号为0和1的两个栈存放于一个数组空间V[m]中。
  9. html的字体红底颜色,红底黄字门头风水好吗 什么颜色招牌好
  10. mac docker搭建开发环境
  11. django 1.8 官方文档翻译:7-3 Django管理文档生成器
  12. JavaScript进阶高级
  13. live555源码编译(win7+vs2010)
  14. ActiveX开发流程
  15. Python爬虫编程思想(69): 项目实战--抓取当当图书排行榜
  16. 工欲善其事必先利其器-SpringBoot源码研究之源码编译
  17. [生存志] 第134节 兵锋十万踏匈奴
  18. python中次方怎么表示_python中n次方怎么表示
  19. formality: 形式验证流程
  20. postman接口自动化图文案例介绍

热门文章

  1. 华为猫复活记(ADSL猫固件升级失败修复)
  2. 【Qt】QListView
  3. 程序员:大师,有些东西我放不下...
  4. Glide4 加载失败时显示默认图片
  5. 数据质量管理系统有效清理垃圾数据
  6. Deepstream 6.1.1 以及 Python Binding Docker 安装
  7. Xcode8以及iOS10问题记录
  8. 【项目管理】人力资源管理之一:X-Y理论
  9. qq如何实现在线状态服务
  10. Error: Spawn SVN ENOENT