签名:但行好事,莫问前程。
文章目录
- 前言
- 一、数据库表设计
- 二、递归查询实现组织树
- 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
总结
博客主要记录了工作中三级类目分类,递归查询组织树的算法,有啥错误或不足地方请指正,如果对你有所帮助,请一键三连。