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

来源:互联网 发布:java gc机制 编辑:程序博客网 时间:2024/05/21 20:25

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

阅读全文
0 0
原创粉丝点击