商品分类递归查询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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最长递增子序列的三种算法

    最长递增子序列的三种算法转载自:http://qiemengdao.iteye.com/blog/1660229最长递增子序列 问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5,6,7,1,2,8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解法1:最长公共子序列法这个问题

    2022年4月29日
    55
  • Python标准库之time和datetime

    注:博客转载自:https://www.cnblogs.com/zhangxinqi/p/7687862.html1、python3日期和时间Python程序能用很多方式处理日期和时间,转换日期

    2021年12月29日
    47
  • c++使用json_qt读写json文件

    c++使用json_qt读写json文件目录前言一、json文件简介1、json文件2、json与其他存储数据方式比较二、C++操作json文件1、jsoncpp库下载2、C++从字符串中读取json3、C++从文件中读取json4、C++写入json文件5、主函数附:jsoncpp库配置1、解压并转移2、配置属性3、配置项目前言json文件是比较轻量级的文件,格式简单…

    2022年10月12日
    4
  • jmeter性能测试步骤入门(性能测试工具jmeter)

    1.进行javajdk环境的安装(注意尽量使用稳定的版本不要使用最新版)2.配置java相关的环境变量的配置安装jmeter1.地址:ApacheJMeter-ApacheJMeter™,点击最左边的DownloadReleases二进制版本解压可用2.配置环境变量【变量名】JMETER_HOME【变量值】E:\jmeter\apache-jmeter-5.4.1(根据实际的jmeter解压路径填写)打开jmeter:双击jmeter目录下的jmet…

    2022年4月15日
    121
  • 静态局部变量和静态全程变量static。

    静态局部变量和静态全程变量static。1.什么是static?static是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。1.1static的引入我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题:如果想将函数中此变量的值保存至下一次调用时,如何实现?最容易想到的方法是定义为全局的变量,但定…

    2022年5月1日
    39
  • linux内核版本介绍_ubuntu内核版本查看

    linux内核版本介绍_ubuntu内核版本查看问题是否有Ubuntu版本列表,默认对应Linux内核版本?答案14.10WartyWarthog2.6.85.04HoaryHedgehog2.6.105.10BreezyBadger2.6.126.06DapperDrake2.6.156.10EdgyEft2.6.177.04FeistyFawn2.6.207.10GutsyGibbon2.6.228…

    2022年8月23日
    6

发表回复

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

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