当前位置: 首页 > article >正文

【精品】递归查询数据库 获取树形结构数据 通用方法

数据库表结构

在这里插入图片描述
在这里插入图片描述

实体类基类

@Getter
@Setter
@ToString
public class RecursionBean {

    /**
     * 编号
     */
    private Long id;

    /**
     * 父权限ID,根节点的父权限为空
     */
    @JsonIgnore
    private Long pid;

    private List<? extends RecursionBean> children;

    /**
     * 递归查询子节点
     *
     * @param root 根节点
     * @param list 所有节点
     * @return 根节点信息
     */
    private static <T extends RecursionBean> List<T> getChildren(T root, List<T> list) {
        final List<T> res = new ArrayList<>();
        for (T item : list) {
            if (Objects.equals(item.getPid(), root.getId())) {
                item.setChildren(getChildren(item, list));
                res.add(item);
            }
        }
        return res;
    }

    public static <T extends RecursionBean> List<T> getRecursionList(List<T> list) {
        final List<T> res = new ArrayList<>();
        for (T item : list) {
            if (item.getPid() == null) {
                item.setChildren(getChildren(item, list));
                res.add(item);
            }
        }
        return res;
    }

}

VO类

@Getter
@Setter
@ToString(callSuper = true)
public class PermissionVO extends RecursionBean {

    /**
     * 权限名称
     */
    private String title;

    /**
     * 权限编码
     */
    private String code;

    /**
     * 权限所对应的图标
     */
    private String icon;

    /**
     * 菜单类型: 1菜单   2按钮
     */
    private Integer type;

    /**
     * 权限所能访问的资源的路径
     */
    private String path;

    /**
     * 是否为外部链接
     */
    private Boolean external;


    /**
     * 删除标识:0删除  1未删除
     */
    private Boolean deleted;

}

调用代码

 @GetMapping("/v1/list")
@LogAnno(value = "权限分页", module = "Permission模块", opt = OptEnum.SELECT)
public ResultBean<List<PermissionVO>> list() {
    // 将Query对象转换成QueryWrapper对象
    QueryWrapper<Permission> queryWrapper = QueryWrapperUtil.query2wrapper(permissionQuery);
    List<Permission> permissionList =    permissionService.list(queryWrapper);

    final List<PermissionVO> permissionVOList = permissionConverter.permissionList2permissionVOList(permissionList);
    final List<PermissionVO> list = RecursionBean.getRecursionList(permissionVOList);
    System.out.println(JsonUtil.obj2string(list));

    return ResultBeanUtil.success(list);
}

结果

在这里插入图片描述


http://www.kler.cn/a/273121.html

相关文章:

  • PHP 字符串
  • SpringBoot之LazyInitializationBeanFactoryPostProcessor类源码学习
  • JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析
  • 如何解决Webview和H5缓存问题,确保每次加载最新版本的资源
  • 软件测试 —— Selenium常用函数
  • (十)ROS的常用组件——rosbag和rqt工具箱
  • PSCA复位控制集成之复位信号
  • STM32使用常见错误合集(正在更新版)
  • sqllab第二十六A关通关笔记
  • 静态综合实验
  • 断言assert是什么?
  • #每天一道面试题# 什么是MySQL的回表查询
  • PyTorch学习笔记之基础函数篇(十五)
  • C/C++:有助于define宏定义-原文替换的例题
  • 深入解析JVM加载机制
  • 解决:visio导出公式为pdf图片乱码问题
  • Python笔记四之协程
  • [ComfyUI报错信息] 节点错误归类及处理办法(最新完整版)
  • ThreadLocal-内存泄露问题
  • 【LeetCode热题100】104. 二叉树的最大深度(二叉树)
  • 二级Java程序题--03综合应用:源代码(01-42)
  • 利用自定义 URI Scheme 在 Android 应用中实现安全加密解密功能
  • 【React】Vite创建React+TS项目
  • 类和对象(1)
  • Centos8安装wdCP
  • MATLAB中如何导出EXE或DLL