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

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


前言

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


一、数据库表设计

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 {

    @Autowired
    private PageRelationMapper pageRelationMapper;

    // 查询全部数据
    @Override
    public 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

在这里插入图片描述


总结

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值