通过单次查询从数据库获取树状结构数据的方法技术

技术编号:27359616 阅读:16 留言:0更新日期:2021-02-19 13:40
本发明专利技术公开了通过单次查询从数据库获取树状结构数据的方法,本发明专利技术不通过迭代查询,只进行单次的数据库表查询操作,再通过后台逻辑处理的方法,解决了从数据库获取树状结构数据可能出现的迭代死循环及查询效率低下的问题;通过单次数据库表查询操作,再通过后台逻辑处理的方法,解决了从数据库获取树状结构数据可能出现的迭代死循环及查询效率低下的问题,提高了获取树状结构数据操作的效率及安全性。性。性。

【技术实现步骤摘要】
通过单次查询从数据库获取树状结构数据的方法


[0001]本专利技术涉及后端开发
,尤其涉及通过单次查询从数据库获取树状结构数据的方法。

技术介绍

[0002]目前获取树状结构数据的方法中,大多采用通过子节点数据的父节点id来进行迭代查询。先获取到一个给定的数据id,通过查询父节点id为该给定id的数据来获取子节点数据,再按上述方法循环迭代查询,以此获取到给定id下的所有子节点数据。但使用此种方法会存在两个问题:一是如果数据库中数据错误,如父节点id与节点本身id相同,则迭代会陷入死循环;二是通过循环迭代每次会重新打开一个数据库的查询连接,连接过多时查询性能会降低。

技术实现思路

[0003]本专利技术的目的就在于为了解决上述问题而提供一种通过单次查询从数据库获取树状结构数据的方法,本专利技术不通过迭代查询,只进行单次的数据库表查询操作,再通过后台逻辑处理的方法,解决了从数据库获取树状结构数据可能出现的迭代死循环及查询效率低下的问题;避免了因数据错误可能会出现的死循环问题,同时只进行一次查询,避免了连接数过多导致的查询性能降低的问题,有效提高了查询效率。
[0004]本专利技术通过以下技术方案来实现上述目的:
[0005]通过单次查询从数据库获取树状结构数据的方法,包括以下步骤:
[0006]步骤1,查询出数据表中树状结构所包含的所有数据集合,查询出的数据必须至少存在id及父id两个字段;
[0007]步骤2,新建一个类用于保存查询出的数据,新的对象类与原始数据对象的区别为至少存在一个对象集合字段children用于保存子层级的数据;
[0008]步骤3,以数据的id为key,数据对象为value将所有数据保存到一个Map中;
[0009]步骤4,遍历该Map的value,判断每一个value的父id是否为第一级数据的默认父id,若不是则取出Map中key等于此父id的数据,将value添加到取出数据的children字段中;
[0010]步骤5,取出Map中value值的父id为第一级数据默认父id的所有值并整理为对象集合,此对象集合则为所需要的树状结构数据。
[0011]进一步方案为,仅在第一步查询树状结构包含的所有数据时与数据库之间产生交互。
[0012]进一步方案为,所述步骤2中,存在一个包含子层级数据的类且至少存在一个唯一的id标识及父id;
[0013]通过这个实体类保存了树状结构数据,包括父层级的数据信息和该父层级下属所有的子层级以及子层级的子层级数据信息。
[0014]进一步方案为,所述步骤3中,通过一个Map将数据的id与数据通过键值对一一对应。
[0015]进一步方案为,所述步骤5中,遍历了Map的值,根据Map中数据与id一一对应的关系及父id,填充实体类的子层级数据信息。
[0016]本专利技术的有益效果在于:
[0017]通过单次数据库表查询操作,再通过后台逻辑处理的方法,解决了从数据库获取树状结构数据可能出现的迭代死循环及查询效率低下的问题,提高了获取树状结构数据操作的效率及安全性。
附图说明
[0018]为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要实用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0019]图1为本专利技术流程图。
[0020]图2为本专利技术的实施流程图。
具体实施方式
[0021]为使本专利技术的目的、技术方案和优点更加清楚,下面将对本专利技术的技术方案进行详细的描述。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本专利技术所保护的范围。
[0022]在任一实施例中,如图1-2所示,本专利技术的通过单次查询从数据库获取树状结构数据的方法,包括:
[0023]步骤1,查询出数据表中树状结构所包含的所有数据集合,查询出的数据必须至少存在id及父id两个字段;
[0024]步骤2,新建一个类用于保存查询出的数据,新的对象类与原始数据对象的区别为至少存在一个对象集合字段children用于保存子层级的数据;
[0025]步骤3,以数据的id为key,数据对象为value将所有数据保存到一个Map中;
[0026]步骤4,遍历该Map的value,判断每一个value的父id是否为第一级数据的默认父id,若不是则取出Map中key等于此父id的数据,将value添加到取出数据的children字段中;
[0027]步骤5,取出Map中value值的父id为第一级数据默认父id的所有值并整理为对象集合,此对象集合则为所需要的树状结构数据。
[0028]1.仅在第一步查询树状结构包含的所有数据时与数据库之间产生交互。
[0029]2.存在一个独特的包含子层级数据的类且至少存在一个唯一的id标识及父id;
[0030]通过这个实体类保存了树状结构数据,包括父层级的数据信息和该父层级下属所有的子层级以及子层级的子层级数据信息。
[0031]3.通过一个Map将数据的id与数据通过键值对一一对应;
[0032]4.遍历了Map的值,根据Map中数据与id一一对应的关系及特征2中存在的父id,填充了特征2中实体类的子层级数据信息。
[0033]在一个具体实施例中,如图1-2所示,本专利技术的通过单次查询从数据库获取树状结构数据的方法,具体的工作流程如下:
[0034]步骤1如图1,一次查询出数据表中树状结构所包含的所有数据集合List<Data>,Data类中至少存在id及parentId两个字段。
[0035]步骤2新建一个类DataDto将List<Data>中的数据转存到List<DataDto>中,DataDto与Data的区别为DataDto中存在一个字段children,类型为List<DataDto>用于保存子级数据,初始为空集合。
[0036]步骤3以DataDto的id为key,DataDto为value将步骤2中得到的List<DataDto>中的所有数据保存到一个Map<Integer,DataDto>中。
[0037]步骤4如图2中所示遍历该步骤3中Map的value值,判断每一个DataDto的parentId是否为0,若不是则取出Map中key等于此parentId的数据dataDto1,将value添加到dataDto1的children字段中。
[0038]步骤5取出Map<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.通过单次查询从数据库获取树状结构数据的方法,其特征在于,包括以下步骤:步骤1,查询出数据表中树状结构所包含的所有数据集合,查询出的数据必须至少存在id及父id两个字段;步骤2,新建一个类用于保存查询出的数据,新的对象类与原始数据对象的区别为至少存在一个对象集合字段children用于保存子层级的数据;步骤3,以数据的id为key,数据对象为value将所有数据保存到一个Map中;步骤4,遍历该Map的value,判断每一个value的父id是否为第一级数据的默认父id,若不是则取出Map中key等于此父id的数据,将value添加到取出数据的children字段中;步骤5,取出Map中value值的父id为第一级数据默认父id的所有值并整理为对象集合,此对象集合则为所需要的树状结构数据。2.如权利要求1所述的...

【专利技术属性】
技术研发人员:钟声
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1