根据ParentId生成树状结构这po事

本文分享了解决数据库父子关系问题的解题思路,通过家族谱类比,逐步构建User对象树,包括数据映射、UserVO类定义及代码实现过程,适合初学者理解。

最近项目里老是碰到数据库里存放父子级关系,然后获取出来要根据ParentId生成树状结构对象的需要。
也不知道最近是脑子不行还是咋滴。这po事想了老半天才想明白怎么去构建该结构。555555最后敲出来后,豁然开朗,都有想哭的冲动了。
废话不多说,开始总结和分享一下我的解题思路。(其实这问题不难,我是菜鸡)

需求

  1. 数据库里有一张结构大致如下的表格:
    在这里插入图片描述

  2. 我们需要冲数据库中获取出数据,然后解析成大致如下的树状格式:
    在这里插入图片描述

解题思路

  1. 让我们先像个东西类比一下好吧,老习惯了,万事万物源于生活,从生活中找例子,往往更容易让人明白。
    这个问题其实就相当于:
    有一个家族,告诉你每个人的爸爸是谁,然后让你把他们家族谱做出来。
    不就是这么一回事嘛!!!!!

  2. 那么让我们想想族谱的问题。我们应该怎么去完成这个事情呢?我觉得首先我们可以把所有人的名单都先排成一排。如下图:
    在这里插入图片描述

  3. 然后去看提供给我们的信息。我们能知道每个人的爸爸是谁。那么爸爸是谁就加谁后面。如下图:
    在这里插入图片描述

  4. 最后我们会得到下图这样的结果。这个时候我们知道了什么呢?仔细观察我们就发现我们知道了,每个爸爸他有哪几个儿子。从每个人的爸爸是谁转换成了每个人有几个儿子。这一步很关键很关键。我一直没想清楚怎么解决该问题就是卡在这个点上。
    在这里插入图片描述

  5. 那么为什么要知道每个人的儿子是谁呢?因为下一步我们要这么来。首先我们把最年长的对象1过来先,然后让他把自己儿子叫过来,然后儿子对象2把他的儿子叫过来。最终得到下图。
    在这里插入图片描述

代码实现

上述废话一堆,但其实只要理解了上面的逻辑。代码就好写啦。

  1. 首先创建一个User类,匹配数据库的数据结构来获取数据。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{
   
   
		private Integer id;
		private String name;
		private Integer parentId;
		}
  1. 首先创建一个UserVO类,作为输出的最终数据结构。
@
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值