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

树表转换成有层次的List列表(无限层级)

我的项目环境:mybaits plus

我负责的模块:course_category(课程分类模块)

方法一,传统的遍历组装

这一个方法有问题,先别用

方法二,Hutool自带TreeUtil

    @GetMapping("/tree2")public List tree() {// 1.取出所有的课程分类List<CourseCategory> list = categoryService.list();// 2. Hutool 配置TreeNodeConfig treeNodeConfig = new TreeNodeConfig();// 3.设置一下这个最大深度,建议必须设置treeNodeConfig.setDeep(2);// 3. 直接生成树(根节点 parentId = "0")List<Tree<String>> tree = TreeUtil.build(list,"0",treeNodeConfig,(category, treeNode) -> {// 一定要setId和setParentId才会出现树treeNode.setId(category.getId());treeNode.setParentId(category.getParentId());treeNode.setName(category.getCategoryName());//下面是用allgetset插件一键取出这个类的所有String categoryCode = category.getCategoryCode();Integer level = category.getLevel();String parentId = category.getParentId();LocalDateTime createTime = category.getCreateTime();String createBy = category.getCreateBy();Integer courseCount = category.getCourseCount();Integer subCategoryCount = category.getSubCategoryCount();Integer totalCourseCount = category.getTotalCourseCount();List<CourseCategory> children = category.getChildren();// 把上面取出来的值都putExtra进去,除了children。children他会自动组装// children不能添加,肯定会出现问题treeNode.putExtra("categoryCode", categoryCode);treeNode.putExtra("level", level);treeNode.putExtra("parentId", parentId);treeNode.putExtra("createTime", createTime);treeNode.putExtra("createBy", createBy);treeNode.putExtra("courseCount", courseCount);treeNode.putExtra("subCategoryCount", subCategoryCount);treeNode.putExtra("totalCourseCount", totalCourseCount);});return tree;}

返回结果:(id,parentId,name是set进去的,children是自动组装的,其他的字段要通过putExtra)

[{"id": "18bfc4df4e7b462eaf125b5999a20edf","parentId": "0","name": "组织协同","categoryCode": "10000258","level": 1,"createTime": "2025-08-19T13:39:05","createBy": "cs_huiren","courseCount": 0,"subCategoryCount": 1,"totalCourseCount": 1,"children": [{"id": "2f46ba4e2cec46eaab1a9a6c313bc503","parentId": "18bfc4df4e7b462eaf125b5999a20edf","name": "领导力培养","categoryCode": "21AD45AF","level": 2,"createTime": "2025-08-19T13:39:22","createBy": "cs_huiren","courseCount": 1,"subCategoryCount": 0,"totalCourseCount": 1,"children": null}]},{"id": "812b471578f34044a9ccf5da00022e61","parentId": "0","name": "项目管理 ","categoryCode": "10007462","level": 1,"createTime": "2025-08-13T08:26:04","createBy": "cs_huiren","courseCount": 2,"subCategoryCount": 5,"totalCourseCount": 7,"children": [{"id": "3e9c662f66d64744aabea94ba9002dfa","parentId": "812b471578f34044a9ccf5da00022e61","name": "职能支撑 ","categoryCode": "280EE3C3","level": 2,"createTime": "2025-08-13T09:06:05","createBy": "cs_huiren","courseCount": 4,"subCategoryCount": 4,"totalCourseCount": 5,"children": null}]},{"id": "98c858bfa9114c18bc2c60db6e40c8c0","parentId": "0","name": "技术文档","categoryCode": "10001069","level": 1,"createTime": "2025-08-13T09:31:52","createBy": "cs_huiren","courseCount": 2,"subCategoryCount": 0,"totalCourseCount": 2}
]

方法三,mybatisplus自带

MyBatis-Plus 从 3.5.3 开始 已经在  mybatis-plus-extension  中自带了 无限层级树 的工具方法,不用自己写任何递归。

@Data
@TableName("category")
public class Category {private String id;          // 主键private String parentId;    // 父节点private String categoryName;// 子节点,名字固定叫 children@TableField(exist = false)private List<Category> children = new ArrayList<>();
}
@RestController
@RequiredArgsConstructor
public class CategoryController {private final CategoryMapper categoryMapper;@GetMapping("/tree")public List<Category> tree() {return TreeHelper.build(categoryMapper.selectList(null),Category::getId,Category::getParentId,Category::getChildren);}
}

http://www.dtcms.com/a/342825.html

相关文章:

  • 北京-15k测试-入职甲方金融-上班第二天
  • Python面向对象高级编程——多重继承
  • (LeetCode 面试经典 150 题) 129. 求根节点到叶节点数字之和 (深度优先搜索dfs)
  • 麒麟系统播放图片 速度比较
  • 【Python代码】谷歌专利CSV处理函数
  • 【双极性ocl放大电路原理图】2022-11-11
  • 计算机网络:网络基础、TCP编程
  • Seaborn数据可视化实战:Seaborn基础与实践-数据可视化的艺术
  • 数据安全管理——解读银行保险机构数据安全管理办法【附全文阅读】
  • 哈希:最长连续序列
  • 如何根据团队技术能力选择最适合的PHP框架?
  • Python 标准库--python012
  • 机器学习集成算法与K-means聚类
  • Spring两个核心IoCDI(二)
  • 【信创系统】信创系统传输文件
  • 科普:Python 中颜色的格式: RGB 格式 v.s. RGBA 格式
  • Terraform vs Ansible:基础设施即代码(IaC)工具深度对比与实战指南
  • 哈尔滨服务器托管,如何实现高效稳定运行?
  • 泛型与反射
  • MySQL--MVCC
  • MPS MPQ2013AGQ-AEC1-Z MPS芯源汽车级 同步降压转换器IC 电源传感器IC
  • 【密码学】深入浅出栅栏密码:原理、流程与实现
  • Android:compose-Scaffold组件
  • 【CS创世SD NAND征文】存储芯片在工业电表中的应用与技术演进
  • 基于Python与Tkinter开发的微博多功能自动化助手
  • 构建包含IK插件(中文分词插件)的Elasticsearch镜像
  • 分治思想在系统分流削峰中的实践与Golang前沿实现
  • RK3568项目(十六)--linux驱动开发之块设备介绍
  • C++ 序列式容器深度解析:vector、string、deque 与 list
  • 虚幻基础:曲线