将数据库读取的平级数据转换成父子孙结构

本文记录了如何从数据库中读取模块、页面、操作的平级数据,并转换为父子孙结构的接口实现过程。通过一次数据库查询,避免多次读取,以节省资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天写接口,需求是从保存系统中所有模块、页面、操作的数据库表中读取数据,然后形成父子孙结构,当时为了不多次读取数据库,想了一种方法,当时费了一下午才把接口写出来,不管是不是好的方法,先写出来mark一下。

1、需求就是加载数据库中所有的模块,页面,操作,并按照三级结构展示(若数据库中真的存在没有模块的页面,或者没有页面的操作,这些数据不加载出来)

2、实现过程就是:
首先,从数据库中读取所有的模块,left join获取所有模块下的页面,再left join 获取所有页面下的操作,基本形式为moduleUUID, moduleName,pageUUID,pageName,
operateUUID,operateName;
其次,
①先建立需要输出的对象,使用map结构(map1),key用moduleUUID,value为要输出的list的单个元素;
建立一个map(map2),key为page的uuid,value为该page下面所有的操作对象列表;
再建立一个map(map3),key为module的uuid,value为模块下页面的uuid列表,这个数据仅仅是为了在读取一条数据时判断页面是否已经包含在第一个map里面;
②遍历上面读取的记录,读取一条记录,若新的模块则初始化module并加入map1,然后若页面不为空且是新的页面(即map3中是否包含对应页面)就初始化page信
息并加入map中对应module的pageList;
page中的operateList只初始化为new ArrayList<>()即可;
若操作不为空,将操作加入到对应的页面下面(map2)
③遍历map1中的页面,将页面下的操作列表进行赋值(根据map2)
④遍历map1 ,形成list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值