2020-01-01 10:12

父子关系的数据库表数据转换为树形结构,支持无限层级

张晓茂

数据库

(2788)

(0)

收藏

项目遇到了无限层级数据结构,逻辑处理上有些误区,无意看到了这篇文章受益匪浅,分享一下这篇文章。

原文地址:https://blog.csdn.net/claram/article/details/54616485

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


编程模型

我们以北京行政区划为例,讲解整个模型。


北京市:市辖区 县


市辖区:东城区 西城区 朝阳区 丰台区 石景山区 海淀区 门头沟区 房山区 通州区 顺义区 昌平区 大兴区 怀柔区 平谷区


县:密云县 延庆县


UML类图如下:




TreeNode:定义树的节点对象


nodeId:树节点Id。

nodeName:树节点名称。

parentNodeId:树节点父Id。

orderNum:节点在树中的排序号,在同一节点下进行排序。

level:当前树节点所在的层级,根节点为第一层。

parent:当前树节点的父节点。

children:当前树节点的儿子节点。

allChildren:当前树节点的子孙节点。

ITree:定义树对象要实现的方法。


getTree():以 List 形式返回树的所有的 TreeNode 对象。

getRoot():以 List 形式返回树的根节点,可能是一个或者多个。

getTreeNode(String nodeId):根据 nodeId 返回对应的 TreeNode 对象。

Tree:实现 ITree 接口,提供树的完整功能。


getTree():以 List 形式返回树的所有的 TreeNode 对象。

getRoot():以 List 形式返回树的根节点,可能是一个或者多个。

getTreeNode(String nodeId):根据 nodeId 返回对应的 TreeNode 对象。

ITreeNode:定义模板方法,构造树形结构的类要实现该接口,Tree 通过调用该接口中的方法获取 nodeId nodeName parentNodeId orderNum 数据。


getNodeId():获取树节点Id。

getNodeName():获取树节点名称。

getParentNodeId():获取树节点父Id。

getOrderNum():获取节点在树中的排序号,在同一节点下进行排序。

Org:定义行政区划类,实现 ItreeNode 接口。


实现代码

TreeNode类


TreeNode类.jpg


ITree接口


ITree接口.jpg

Tree类

Tree类.jpg

Org类

Org类.jpg

TreeDemo执行测试返回结果

TreeDemo.jpg

Maven依赖

maven依赖.jpg








0条评论

点击登录参与评论