公开/公告号CN112364013A
专利类型发明专利
公开/公告日2021-02-12
原文格式PDF
申请/专利权人 四川长虹电器股份有限公司;
申请/专利号CN202011136488.2
发明设计人 钟声;
申请日2020-10-21
分类号G06F16/22(20190101);G06F16/2453(20190101);
代理机构51213 四川省成都市天策商标专利事务所;
代理人刘兴亮
地址 621000 四川省绵阳市高新区绵兴东路35号
入库时间 2023-06-19 09:52:39
技术领域
本发明涉及后端开发技术领域,尤其涉及通过单次查询从数据库获取树状结构数据的方法。
背景技术
目前获取树状结构数据的方法中,大多采用通过子节点数据的父节点id来进行迭代查询。先获取到一个给定的数据id,通过查询父节点id为该给定id的数据来获取子节点数据,再按上述方法循环迭代查询,以此获取到给定id下的所有子节点数据。但使用此种方法会存在两个问题:一是如果数据库中数据错误,如父节点id与节点本身id相同,则迭代会陷入死循环;二是通过循环迭代每次会重新打开一个数据库的查询连接,连接过多时查询性能会降低。
发明内容
本发明的目的就在于为了解决上述问题而提供一种通过单次查询从数据库获取树状结构数据的方法,本发明不通过迭代查询,只进行单次的数据库表查询操作,再通过后台逻辑处理的方法,解决了从数据库获取树状结构数据可能出现的迭代死循环及查询效率低下的问题;避免了因数据错误可能会出现的死循环问题,同时只进行一次查询,避免了连接数过多导致的查询性能降低的问题,有效提高了查询效率。
本发明通过以下技术方案来实现上述目的:
通过单次查询从数据库获取树状结构数据的方法,包括以下步骤:
步骤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中,存在一个包含子层级数据的类且至少存在一个唯一的id标识及父id;
通过这个实体类保存了树状结构数据,包括父层级的数据信息和该父层级下属所有的子层级以及子层级的子层级数据信息。
进一步方案为,所述步骤3中,通过一个Map将数据的id与数据通过键值对一一对应。
进一步方案为,所述步骤5中,遍历了Map的值,根据Map中数据与id一一对应的关系及父id,填充实体类的子层级数据信息。
本发明的有益效果在于:
通过单次数据库表查询操作,再通过后台逻辑处理的方法,解决了从数据库获取树状结构数据可能出现的迭代死循环及查询效率低下的问题,提高了获取树状结构数据操作的效率及安全性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要实用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明流程图。
图2为本发明的实施流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
在任一实施例中,如图1-2所示,本发明的通过单次查询从数据库获取树状结构数据的方法,包括:
步骤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的所有值并整理为对象集合,此对象集合则为所需要的树状结构数据。
1.仅在第一步查询树状结构包含的所有数据时与数据库之间产生交互。
2.存在一个独特的包含子层级数据的类且至少存在一个唯一的id标识及父id;
通过这个实体类保存了树状结构数据,包括父层级的数据信息和该父层级下属所有的子层级以及子层级的子层级数据信息。
3.通过一个Map将数据的id与数据通过键值对一一对应;
4.遍历了Map的值,根据Map中数据与id一一对应的关系及特征2中存在的父id,填充了特征2中实体类的子层级数据信息。
在一个具体实施例中,如图1-2所示,本发明的通过单次查询从数据库获取树状结构数据的方法,具体的工作流程如下:
步骤1如图1,一次查询出数据表中树状结构所包含的所有数据集合List,Data类中至少存在id及parentId两个字段。
步骤2新建一个类DataDto将List中的数据转存到List
步骤3以DataDto的id为key,DataDto为value将步骤2中得到的List
步骤4如图2中所示遍历该步骤3中Map的value值,判断每一个DataDto的parentId是否为0,若不是则取出Map中key等于此parentId的数据dataDto1,将value添加到dataDto1的children字段中。
步骤5取出Map
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
机译: 信息注册和准备数据库的方法,信息提供者的数据库的准备方法,信息请求者的数据库的准备方法,信息提供者的数据库和信息查询者的数据库的检索方法,信息提供者的数据库代码和信息的准备方法查询器,以及使用信息提供者和信息查询器的数据库代码检索信息的方法
机译: 用于从多媒体数据库中获取信息的查询准备和呈现涉及通过基于数字化数据描述符的查询从数据库中搜索信息
机译: 响应于从面向对象的环境中接收到的对象查询,生成用于从关系数据库管理系统中获取数据的关系查询的优化集合的系统和方法