三级分类,递归查询组织树

签名:但行好事,莫问前程。

文章目录

  • 前言
  • 一、数据库表设计
  • 二、递归查询实现组织树
    • 1、返回结果类
    • 2、递归方法实现
    • 3、组织树最终数据展示
  • 三、友情链接
  • 总结


前言

公司最近有个需求,涉及到商品的三级类目,需要做成组织树的形式展示,记录一下。
在这里插入图片描述


一、数据库表设计

CREATE TABLE `page_relation` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`page_name` varchar(255) DEFAULT NULL COMMENT '页面名称',`page_url` varchar(255) DEFAULT NULL COMMENT '页面url',`parent_id` bigint(20) DEFAULT NULL COMMENT '父页面id',`sort` int(11) DEFAULT 1 COMMENT '排序',`add_time` datetime DEFAULT NULL COMMENT '添加时间',`update_time` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=324 DEFAULT CHARSET=utf8mb4 COMMENT='页面关系表';

二、递归查询实现组织树

1、返回结果类

@Data
public class PageRelationVO {private Long id;private String pageName;private String pageUrl;private Long parentId;private Integer sort;private List<PageRelationVO> children;}

2、递归方法实现

/*** <p>* 页面关系表 服务实现类* </p>** @author YangCunle* @since 2023-10-18*/
@Service
public class PageRelationServiceImpl extends ServiceImpl<PageRelationMapper, PageRelation> implements PageRelationService {@Autowiredprivate PageRelationMapper pageRelationMapper;// 查询全部数据@Overridepublic List<PageRelationVO> queryList() {List<PageRelationVO> pageRelationList = pageRelationMapper.selectAll();return createTree(pageRelationList);}// 生成组织树public List<PageRelationVO> createTree(List<PageRelationVO> lists) {List<PageRelationVO> treeList = lists.stream().filter(item -> item.getParentId() == 0).map(item -> {item.setChildren(getChildren(item, lists));return item;}).collect(Collectors.toList());return treeList;}// 此方法将被递归调用private List<PageRelationVO> getChildren(PageRelationVO PageRelationVO, List<PageRelationVO> lists) {List<PageRelationVO> res = lists.stream().filter(item -> item.getParentId().equals(PageRelationVO.getId())).map(item -> {item.setChildren(getChildren(item, lists));return item;}).collect(Collectors.toList());return res;}}

3、组织树最终数据展示

在这里插入图片描述

三、友情链接

如果你看我的代码看不懂,可以参考尚硅谷《谷粒商城》的视频-P45章节、商品分类,递归查询讲解。
附上链接:https://www.bilibili.com/video/BV1np4y1C7Yf/?p=45&vd_source=13a32e44d79603eea4f5870acb9f07a0

在这里插入图片描述


总结

博客主要记录了工作中三级类目分类,递归查询组织树的算法,有啥错误或不足地方请指正,如果对你有所帮助,请一键三连。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/192025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 中使用 ResourceLoader 加载资源的完整示例

ResourceLoader 是 Spring 框架中用于加载资源的接口。它定义了一系列用于获取资源的方法&#xff0c;可以处理各种资源&#xff0c;包括类路径资源、文件系统资源、URL 资源等。 以下是 ResourceLoader 接口的主要方法&#xff1a; Resource getResource(String location)&am…

什么是java反射机制?

类的正常加载 反射概述 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&#xff1b;这种动态获取的信息以及动态调用对象的方法的功能称为jav…

2023年道路运输企业主要负责人证考试题库及道路运输企业主要负责人试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年道路运输企业主要负责人证考试题库及道路运输企业主要负责人试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人…

FDM(傅里叶分解)

代码的使用教程 傅里叶分解&#xff08;FDM&#xff09; 代码原理 FDM (Frequency Division Multiplexing)是一种调制技术&#xff0c;将信号分成多个不同的频带进行传输&#xff0c;从而实现多路复用的通信方式。FDM分解原理是将不同频率的信号分解成不同的频带&#xff08;子…

Flutter笔记:Matrix4矩阵变换与案例

Flutter笔记 Matrix4矩阵变换及其案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…

C++初阶 日期类的实现(下)

目录 一、输入输出(>>,<<)重载的实现 1.1初始版 1.2友元并修改 1.2.1简单介绍下友元 1.2.2修改 1.3>>重载 二、条件判断操作符的实现 2.1操作符的实现 2.2!操作符的实现 2.3>操作符的实现 2.4>,<,<操作符的实现 三、日期-日期的实现 …

Windows下安装RabbitMQ

1.安装Erlang 因为RabbitMQ是用Erlang语言编写的&#xff0c;所以在安装RabbitMQ之前需要先安装Erlang。 如果还未安装Erlang&#xff0c;官方下载安装包&#xff0c;点击Download Windows installer下载Erlang Downloads - Erlang/OTP 下载Erlang/OTP后&#xff0c;双击otp的…

【入门篇】1.5 redis 客户端Jedis和Lettuce对比详解

文章目录 0. 前言1. Lettuce 与Jedis 对比2.详解2.1 线程安全2.2 阻塞/非阻塞2.3 集群支持2.4 PUB/SUB模型2.5 二进制协议 3. 参考资料 0. 前言 对于Java开发者来说&#xff0c;Jedis和Lettuce是两种非常常见的Redis客户端&#xff0c;他们可以帮助开发者更容易地在Java应用中…

提升 Python 执行速度:Codon、C/C++、Rust、Numba(JIT)、Taichi、Nuitka、MatxScript

几种流行的 Python 性能加速方案对比&#xff1a;https://zhuanlan.zhihu.com/p/604519817 对于一般通用场景用户&#xff0c;对性能没有那么强烈的诉求&#xff0c;紧跟官方步伐&#xff0c;升级到最新版本的 Python 既可&#xff0c;或者使用 PyPy。Numba、Codon、Taichi 等这…

网工内推 | Linux运维,六险二金,最高30K,IE认证优先

01 上海域起 招聘岗位&#xff1a;Linux运维工程师 职责描述&#xff1a; 1.负责游戏产品运维相关的工作&#xff0c;流程文档、技术文档、功能脚本的编写整理 2.负责分析并排除系统、数据库、网络、应用等游戏产品运维中出现的故障及错误 3.负责对游戏产品项目进行线上部署、…

kubenetes-pod高可用

一、概述 实现pod层面的高可用&#xff0c;需要避免容器进程被终止避免Pod被驱逐&#xff1a; 设置合理的resources.memory limits 防止容器进程被 OOMKill&#xff0c;防止Pod被驱逐&#xff1b;设置合理的emptydir.sizeLimit 并且确保数据写入不超过emptyDir的限制&#xf…

kubenetes-容器网络接口CNI

一、CNI Kubernetes 网络模型设计的基础原则是&#xff1a; 所有的Pod能够不通过NAT(网络地址转换)就能相互访问。所有的节点能够不通过NAT就能相互访问。容器内看见的IP地址和外部组件看到的容器IP是一样的。 Kubernetes的集群里&#xff0c;IP地址是以Pod为单位进行分配的…