2020-01-01 10:49

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

张晓茂

数据库

(1767)

(0)

收藏

刚刚进行了文章修改,这是最新的

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

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

这个是代码图片

父子级别数据处理.rar

这个是代码文件

数据处理代码.rar


文章内图片不是很清楚,而且写出来的文章居然不能直接找到修改,然后找了半天才找到,这里@牛叔叔,吐槽一下,我居然没有删除自己文章的权限。


以下为正文


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


编程模型

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


北京市:市辖区 县


市辖区:东城区 西城区 朝阳区 丰台区 石景山区 海淀区 门头


沟区 房山区 通州区 顺义区 昌平区 大兴区 怀柔区 平谷区


县:密云县 延庆县


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

ITreeNode接口

ITreeNode接口.jpg

Org类 

Org类.jpg

TreeDemo类执行方法,返回结果集

TreeDemo.jpg


执行结果

执行结果.jpg

Maven依赖注入

maven依赖.jpg

父子级别数据处理.rar











0条评论

点击登录参与评论