使用递归处理无限自关联表

server/2025/1/22 16:59:51/

无限自关联表

所谓的无限自关联表就是类似于下图,有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赋值


http://www.ppmy.cn/server/160514.html

相关文章

Python绘制数据地图-MovingPandas

MovingPandas 是一个用于时空数据分析的 Python 库&#xff0c;它扩展了 Pandas 和 GeoPandas&#xff0c;使得处理和分析带有时间戳的地理数据变得更加方便。虽然 MovingPandas 本身不直接提供数据可视化功能&#xff0c;但你可以结合其他库如 matplotlib、folium 或 plotly 来…

Stable Diffusion 提示词编写技巧及示例

Stable Diffusion 提示词&#xff08;Prompt&#xff09;的编写技巧及示例是生成高质量图像的关键。以下将结合我搜索到的资料&#xff0c;详细说明提示词的编写规则、技巧和示例。 一、提示词的基本规则与格式 分隔符&#xff1a;提示词之间需用英文逗号&#xff08;,&#…

五、华为 RSTP

RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;是 STP 的优化版本&#xff0c;能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制&#xff1a;RSTP 通过引入边缘端口、P/A&#xff08;Proposal/Agreement&#xff09;机制等&…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下&#xff1a; 拼写错误或路径错误&#xff1a;确保你输入的目录名称正确。目录名称是区分大小写的&#xff0c;因此请确保使用正确的大小写。正确的目录名…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时&#xff0c;普通应用是无法使用的&#xff0c;需要在AndroidManifest中配置sharedUserId&#xff1a; AndroidManifest.xml中的android:sharedUserId“android.uid.system”&#xff0c;代表的意思是和系统相同的uid&a…

Chrome远程桌面无法连接怎么解决?

Chrome远程桌面连接已停止工作 Chrome远程桌面是一款极为便捷的浏览器插件&#xff0c;能够帮助用户将自己的计算机连接到其他设备&#xff0c;无论是手机、平板电脑还是其他电脑。然而&#xff0c;在实际使用中&#xff0c;许多用户可能会面临各种各样的问题&#xff0c;比如…

代码随想录day14

二叉树的反转&#xff0c;采用迭代&#xff0c;只能用前序和后序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(i…

如何写出优秀的提示词?ChatGPT官方的六种方法

使用ChatGPT时&#xff0c;提示词&#xff08;Prompt&#xff09;的质量直接影响到生成结果的好坏。ChatGPT官方文档中提供了六种优化提示词的方法&#xff0c;这些方法能够帮助用户更好地利用ChatGPT&#xff0c;提升其生成内容的准确性和实用性。本文将结合中文习惯和新的示例…