商品分类递归查询Tree结构展示

商品分类递归查询Tree结构展示

商品分类递归查询Tree结构展示

商品分类数据结构:

create table tb_category(
	id int primary key auto_increment,
    name varchar(50),
    goods_num int,
    is_show char(1),
    is_menu char(1),
    seq int,
    parent_id int,
    template_id int
);

parent_id 父ID,自关联。

import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/** * category实体类 * @author Administrator * */
@Table(name="tb_category")
public class Category implements Serializable{
   

	@Id
	private Integer id;//分类ID

	private String name;//分类名称

	private Integer goodsNum;//商品数量

	private String isShow;//是否显示

	private String isMenu;//是否导航

	private Integer seq;//排序

	private Integer parentId;//上级ID

	private Integer templateId;//模板ID

	//setXxx/getXxx 

}

前后端约定数据格式:

[
	{
   
        name:"一级菜单",
        menus:[
            {
   
                name:"二级菜单",
                menus:[
                   {
   
                        name:"三级菜单"
                   },
                    .........
                ]
            }
        ]
    }
 
]
 //这种数据格式集合里面嵌套Map.

1.先查询出符合条件(符合条件是is_show=1,表示展示)的数据 List<Category> categoryList

2.通过递归形式进行数据整理。

​ (1)用什么数据类型进行接收:List<Map>

​ (2)写一个方法使用递归来整理,传递参数为categoryListparentId=0

​ (3)遍历categoryList 得到每个category中的id

​ (4)idparentId进行比较,如果相等 放入Map,在放入”menus”的时候在调用这个方法,此时就是在递归了。

Mapp用的是通用Mapper/数据库使用的是Mysql

 public List<Map> findCategoryTree() {
    
	//先查询符合条件的所有分类
    Example example=new Example(Category.class); 
    Example.Criteria criteria = example.createCriteria(); 
    criteria.andEqualTo("isShow","1");//1为显示 ;0 不显示 
    //排序
    example.setOrderByClause("seq"); 
    List<Category> categories = categoryMapper.selectByExample(example); 
	
    //parentId = 0 第一次 传递参数 0 表示一级, 查看表中的数据。
    return findByParentId(categories,0); 

}
//数据整理 使用递归
private List<Map> findByParentId(List<Category> categoryList, Integer 

parentId){
    

    List<Map> mapList=new ArrayList<Map>(); 

    for(Category category:categoryList){
    

        if(category.getParentId().equals(parentId)){
    

            Map map =new HashMap(); 

            map.put("name",category.getName()); 

            map.put("menus",findByParentId(categoryList,category.getId())); 

            mapList.add(map); 

        } 

    }

    return mapList; 

} 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100765.html原文链接:https://javaforall.net

(0)
上一篇 2021年7月11日 下午6:00
下一篇 2021年7月11日 下午7:00


相关推荐

  • MAC 安装 Redis 客户端

    MAC 安装 Redis 客户端参考链接 https stackoverflo com questions macos x is there a way to install only redis cli

    2026年3月17日
    2
  • 信道容量计算公式_信道均衡算法

    信道容量计算公式_信道均衡算法信道带宽=符号率*符号数*(188/204)注释:符号率&lt–&gt频宽(下行欧标频宽8MHz,上行有1.6MHz,3.2MHz,6.4MHz三种频宽);符号数&lt–&gt调制方式(符号数=Log2~调制方式,如QAM64的符号数为6,2的6次方=64)=====================================================…

    2022年8月31日
    6
  • pycharm2021.2激活码(已测有效)

    pycharm2021.2激活码(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    1.3K
  • QT6.1.2下载和安装教程

    QT6.1.2下载和安装教程QT6.1.2下载和安装教程Qt自从5.15版本开始,对非商业版本(开源版本)不提供已经制作好的离线exe安装包,QT6.1.2版本需要在线下载安装。参考链接:1-Qt6在线安装图文步骤文章目录下载安装用到的软件下载安装用到的软件一、下载QT软件在线下载器:1、国内清华大学开源软件镜像站下载 (推荐,网速快)https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/2、Q.

    2022年5月16日
    44
  • J2EE架构师之路「建议收藏」

    J2EE架构师之路「建议收藏」不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程。发现电脑上安装了各种各样的J2EE工具:JBuilder,WSAD,Eclipse,Rose,Together,Weblogic,Jtest,Optimizator,Mysql…发现电脑上保存了各种各样的OpenSource项目:Tomcat,JBoss,Ant,Hibernate,Spr

    2022年6月30日
    30
  • linux使用docker_docker bash

    linux使用docker_docker bash安装命令sudoaptinstalldocker.io查看安装sudodocker–version添加用户到docker组sudogpasswd-a$USERdocker重启dockersudosystemctlrestartdocker查看状态sudodockerps-a查看镜像sudodockerimages创建容器dockerrun-it–nameubuntu1ubuntudockerrun-…

    2026年1月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号