使用递归处理无限自关联表
无限自关联表
所谓的无限自关联表就是类似于下图,有parent_id的这种,需要分级显示
实体类
实体类需要添加一个属性--下级列表 List<SysMenu> children;这个属性中是我们该实体的孩子结点
工具类处理分级树
public class MenuHelper {
public static List<SysMenu> buildTree(List<SysMenu> sysMenus) {
List<SysMenu> tree=new ArrayList<>();
//查找根节点
for (SysMenu sysMenu : sysMenus) {
if (sysMenu.getParentId()==0){
tree.add(findChildren(sysMenu,sysMenus));
}
}
return tree;
}
//查找某结点的孩子结点
private static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenus) {
//先将该结点的孩子集合置为空,随后再拿出集合添加
sysMenu.setChildren(new ArrayList<>());
for (SysMenu menu : sysMenus) {
if (menu.getParentId().longValue()==sysMenu.getId().longValue()){
//是该结点的孩子就插入,再递归查询这个孩子的孩子
sysMenu.getChildren().add(findChildren(menu,sysMenus));
}
}
return sysMenu;
}
}
Service层业务处理
public List<SysMenu> findNodeList() {
//查询所有的结点
List<SysMenu> sysMenus= sysMenuMapper.selectAllMenus();
if (CollectionUtil.isEmpty(sysMenus)) return null;
//处理分级逻辑
List<SysMenu> treeList = MenuHelper.buildTree(sysMenus); //构建树形数据
return treeList;
}
返回结果
我们返回的结果就可以分级的显示,前端就利用element-plus中的表格即可,然后js赋值