树形展示三级分类并分页:递归树形结构

Posted prode123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形展示三级分类并分页:递归树形结构相关的知识,希望对你有一定的参考价值。

今天在写一个项目的时候遇到了一个问题:如何写三级分类的接口?

经过多方查询资料 我解决了该问题

前端页面如下:

 数据库:

 在实体类中添加children

package com.example.humanresources.entity;

import java.util.Date;
import java.io.Serializable;
import java.util.List;

import lombok.Data;
@Data
public class BizProductCategory implements Serializable 
    private static final long serialVersionUID = 892831452437776529L;
    /**
    * 类别id
    */
    
    private Long id;
    /**
    * 类别名称
    */
    
    private String name;
    /**
    * 备注
    */
    
    private String remark;
    /**
    * 排序
    */
    
    private Integer sort;
    
    private Date createTime;
    
    private Date modifiedTime;
    /**
    * 父级分类id
    */
    
    private Long pid;

//    @TableField
    private List<BizProductCategory> children;


在mybatis-plus中需要用到@TableField注解

由于我直接用的mybatis 所以直接将children添加为属性即可

因为只对一级分类进行分页,所以我又写了一个实体类:

package com.example.humanresources.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class BizProductCategoryPlus 
    private BizProductCategory bizProductCategory;
    private List<BizProductCategory> rows;
    private int total;

service层代码:

  @Override
    public BizProductCategoryPlus listWithTree(int  pageNum, int pageSize) 
        // 1.查出所有分类
        List<BizProductCategory> bizProductCategories = bizProductCategoryDao.selectAll();
        // 2.组装成父子树形结构
        // 2.1找出所有的一级分类
        List<BizProductCategory> level1Menus = bizProductCategories.stream().filter(bizProductCategory ->
             bizProductCategory.getPid() == 0
        ).map((menu)->
            menu.setChildren(getChildrens(menu,bizProductCategories));
            return menu;
        ).sorted((menu1,menu2)->
            // 菜单的排序
            return (menu1.getSort()==null?0:menu1.getSort())-(menu2.getSort()==null?0:menu2.getSort());
        ).collect(Collectors.toList());
        //        List<BizProductCategory> level1Menus = bizProductCategories.stream().filter((bizProductCategory) -> 
        //            return bizProductCategory.getPid() == 0;
        //        ).collect(Collectors.toList());
        List<BizProductCategory> page = new ArrayList<>();
        int start = (pageNum-1)*pageSize;
        for (int i = start; i < (start+pageSize > level1Menus.size() ? level1Menus.size() : start+pageSize); i++) 
            page.add(level1Menus.get(i));
        
        BizProductCategoryPlus bizProductCategoryPlus=new BizProductCategoryPlus();
        bizProductCategoryPlus.setRows(page);
        bizProductCategoryPlus.setTotal(level1Menus.size());
        return bizProductCategoryPlus;
    

上面调用的递归方法:

//    递归查找所有菜单的子菜单
//    root为当前菜单 all是所有菜单
    private List<BizProductCategory> getChildrens(BizProductCategory root, List<BizProductCategory> all)
        List<BizProductCategory> children = all.stream().filter(bizProductCategory -> 
            return bizProductCategory.getPid() == root.getId();
        ).map(bizProductCategory->
//   找到子菜单
            bizProductCategory.setChildren(getChildrens(bizProductCategory,all));
            return bizProductCategory;
        ).sorted((menu1,menu2)->
//    菜单的排序
            return (menu1.getSort()==null?0:menu1.getSort())-(menu2.getSort()==null?0:menu2.getSort());
        ).collect(Collectors.toList());
        return children;
    

controller层:

/**
     * 分类树形结构
     * @param pageNum
     * @param pageSize
     * @return
     * @author lt
     */
    @GetMapping("categoryTree")
    public R findAll(int  pageNum,int pageSize)
        BizProductCategoryPlus bizProductCategoryPlus = bizProductCategoryService.listWithTree(pageNum, pageSize);
//        BizProductCategoryPlus bizProductCategoryPlus=new BizProductCategoryPlus();
        return R.ok().setData(bizProductCategoryPlus);

这样就实现了对一级分类的分页查询

以上是关于树形展示三级分类并分页:递归树形结构的主要内容,如果未能解决你的问题,请参考以下文章

商城项目08_三级分类前端展示新增修改删除

商城项目08_三级分类前端展示新增修改删除

《分布式微服务电商》专题(十四)-电商项目商品类目后台页面访问

VUE项目实战39商品分类树形表格渲染和分页

SqlServer :实现树形结构递归查询(无限极分类)

sqlserver实现树形结构递归查询(无限极分类)