1、准备表结构及对应的表数据
a、表结构:

  1. create table TB_TREE
  2. (
  3. CID NUMBER not null,
  4. CNAME VARCHAR2(50),
  5. PID NUMBER //父节点
  6. )

b、表数据:

  1. insert into tb_tree (CID, CNAME, PID) values (1, '中国', 0);
  2. insert into tb_tree (CID, CNAME, PID) values (2, '北京市', 1);
  3. insert into tb_tree (CID, CNAME, PID) values (3, '广东省', 1);
  4. insert into tb_tree (CID, CNAME, PID) values (4, '上海市', 1);
  5. insert into tb_tree (CID, CNAME, PID) values (5, '广州市', 3);
  6. insert into tb_tree (CID, CNAME, PID) values (6, '深圳市', 3);
  7. insert into tb_tree (CID, CNAME, PID) values (7, '海珠区', 5);
  8. insert into tb_tree (CID, CNAME, PID) values (8, '天河区', 5);
  9. insert into tb_tree (CID, CNAME, PID) values (9, '福田区', 6);
  10. insert into tb_tree (CID, CNAME, PID) values (10, '南山区', 6);
  11. insert into tb_tree (CID, CNAME, PID) values (11, '密云县', 2);
  12. insert into tb_tree (CID, CNAME, PID) values (12, '浦东', 4);

2、TreeNode对象,对应tb_tree

  1. public class TreeNode implements Serializable {
  2. private Integer cid;
  3. private String cname;
  4. private Integer pid;
  5. private List nodes = new ArrayList();
  6.  
  7. public TreeNode() {
  8. }
  9.  
  10. //getter、setter省略
  11. }

3、测试数据

  1. public class TreeNodeTest {
  2. @Test
  3. public void loadTree() throws Exception{
  4. System.out.println(JsonUtils.javaToJson(recursiveTree(1)));
  5. }
  6.  
  7. /**
  8. * 递归算法解析成树形结构
  9. *
  10. * @param cid
  11. * @return
  12. * @author jiqinlin
  13. */
  14. public TreeNode recursiveTree(int cid) {
  15. //根据cid获取节点对象(SELECT * FROM tb_tree t WHERE t.cid=?)
  16. TreeNode node = personService.getreeNode(cid);
  17. //查询cid下的所有子节点(SELECT * FROM tb_tree t WHERE t.pid=?)
  18. List childTreeNodes = personService.queryTreeNode(cid);
  19. //遍历子节点
  20. for(TreeNode child : childTreeNodes){
  21. TreeNode n = recursiveTree(child.getCid()); //递归
  22. node.getNodes().add(n);
  23. }
  24.  
  25. return node;
  26. }
  27. }

输出的json格式如下:

  1. {
  2.     "cid": 1,
  3.     "nodes": [
  4.         {
  5.             "cid": 2,
  6.             "nodes": [
  7.                 {
  8.                     "cid": 11,
  9.                     "nodes": [
  10.                          
  11.                     ],
  12.                     "cname": "密云县",
  13.                     "pid": 2
  14.                 }
  15.             ],
  16.             "cname": "北京市",
  17.             "pid": 1
  18.         },
  19.         {
  20.             "cid": 3,
  21.             "nodes": [
  22.                 {
  23.                     "cid": 5,
  24.                     "nodes": [
  25.                         {
  26.                             "cid": 7,
  27.                             "nodes": [
  28.                                  
  29.                             ],
  30.                             "cname": "海珠区",
  31.                             "pid": 5
  32.                         },
  33.                         {
  34.                             "cid": 8,
  35.                             "nodes": [
  36.                                  
  37.                             ],
  38.                             "cname": "天河区",
  39.                             "pid": 5
  40.                         }
  41.                     ],
  42.                     "cname": "广州市",
  43.                     "pid": 3
  44.                 },
  45.                 {
  46.                     "cid": 6,
  47.                     "nodes": [
  48.                         {
  49.                             "cid": 9,
  50.                             "nodes": [
  51.                                  
  52.                             ],
  53.                             "cname": "福田区",
  54.                             "pid": 6
  55.                         },
  56.                         {
  57.                             "cid": 10,
  58.                             "nodes": [
  59.                                  
  60.                             ],
  61.                             "cname": "南山区",
  62.                             "pid": 6
  63.                         }
  64.                     ],
  65.                     "cname": "深圳市",
  66.                     "pid": 3
  67.                 }
  68.             ],
  69.             "cname": "广东省",
  70.             "pid": 1
  71.         },
  72.         {
  73.             "cid": 4,
  74.             "nodes": [
  75.                 {
  76.                     "cid": 12,
  77.                     "nodes": [
  78.                          
  79.                     ],
  80.                     "cname": "浦东",
  81.                     "pid": 4
  82.                 }
  83.             ],
  84.             "cname": "上海市",
  85.             "pid": 1
  86.         }
  87.     ],
  88.     "cname": "中国",
  89.     "pid": 0
  90. }

递归算法结合数据库 解析 java树形结构的更多相关文章

  1. 使用递归算法结合数据库解析成java树形结构

    使用递归算法结合数据库解析成java树形结构 1.准备表结构及对应的表数据a.表结构: create table TB_TREE ( CID NUMBER not null, CNAME VARCHA ...

  2. 数据库索引 引用树形结构 B-数 B+数

    MySQL 为什么使用B+数 B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域. 这就决定了B+树更适合用来存储外部数据,也就是所谓 ...

  3. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...

  4. Access数据库一种树形结构的实现和子节点查询

    BOOL CManageDataBase::GetDepTreeAllSons( int rootItem ) { CADORecordset Rst(&m_DataBase); BOOL b ...

  5. EasyUI_tree根据数据库数据生成树形结构JSON格式

    @Entitypublic class PubComp { @Id private String aguid; // 菜单ID private String pguid; // 父菜单 private ...

  6. 【MySQL疑难杂症】如何将树形结构存储在数据库中(方案一、Adjacency List)

    今天来看看一个比较头疼的问题,如何在数据库中存储树形结构呢? 像mysql这样的关系型数据库,比较适合存储一些类似表格的扁平化数据,但是遇到像树形结构这样有深度的人,就很难驾驭了. 举个栗子:现在有一 ...

  7. 树形结构的数据库表Schema设计-基于左右值编码

    树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的 ...

  8. 树形结构表的存储【转自:http://www.cnblogs.com/huangfox/archive/2012/04/11/2442408.html】

    在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系.在传统的关系型数据库中,就已经产生了各种解决方案. 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型 ...

  9. Mysql通过Adjacency List(邻接表)存储树形结构

    转载自:https://www.jb51.net/article/130222.htm 以下内容给大家介绍了MYSQL通过Adjacency List (邻接表)来存储树形结构的过程介绍和解决办法,并 ...

随机推荐

  1. VMware扩展Linux根目录磁盘空间(Centos版本)

    1.Centos 关机,选择编辑虚拟机设置,硬盘,在实用工具那里选择“扩展”,指定你需要的存储大小 2.启动客户机操作系统Centos,查看磁盘情况 输入指令 fdisk -l 显示结果如下 Disk ...

  2. 最全spring boot视频系列,你值得拥有

    ================================== 从零开始学Spring Boot视频 ================================== àSpringBoot ...

  3. [Unity插件]Lua行为树(十三):装饰节点完善

    之前介绍了组合节点中三大常用的节点:BTSequence.BTSelector和BTParallel,一般来说,这三种就够用了,可以满足很多的需求. 接下来可以完善一下装饰节点,增加几种新的节点. 1 ...

  4. 温故而知新-robots.txt语法教程

    用几个最常见的情况,直接举例说明:   1. 允许所有SE收录本站:robots.txt为空就可以,什么都不要写.   2. 禁止所有SE收录网站的某些目录: User-agent: * Disall ...

  5. github中SSH公钥的生成与添加

    在终端中输入ssh-keygen -t rsa -C "133XXXXXX@qq.com" 按3个回车,密码为空这里一般不使用密钥. 最后得到了两个文件:id_rsa和id_rsa ...

  6. 键值对操作 之 combineByKey

    combineByKey( createCombiner,mergeValue,mergeCombiners,partitioner) combineByKey() 是最为常用的基于键进行聚合的函数. ...

  7. 3. orcle导入导出dmp文件并更改表空间

    0.数据泵导入导出: expdp  test/test@10.0.0.11/orcl schemas=test dumpfile=test.dmp directory=DPDATA  logfile= ...

  8. Android Camera2的使用

    参考:https://developer.android.com/reference/android/hardware/camera2/package-summary.html camera2提供了一 ...

  9. 转载:python 的包导入

    python 包 多个关系密切的模块应该组织成一个包,以便于维护和使用.这项技术能有效避免名字空间冲突.创建一个名字为包名字的文件夹并在该文件夹下创建一个__init__.py 文件就定义了一个包.你 ...

  10. c#调用带输出参数的存储过程

    sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...