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


相关推荐

  • 简述JVM垃圾回收机制

    简述JVM垃圾回收机制1.Java中的四种引用类型在Java中,对于引用最基本的解释就是:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用(有点指针的意味)。后来Java还将引用划分为了4种,根据被GC回收的时机可以分为:强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)、虚引用(Phantor

    2022年6月11日
    29
  • 51单片机C语言延时函数怎么定义和使用

    51单片机C语言延时函数怎么定义和使用C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsignedchar类型具有比unsignedint更优化的代码,在使用时应该使用unsignedchar作为延时变量。

    2022年6月15日
    39
  • 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

    使用MySQL Workbench建立数据库,建立新的表,向表中添加数据初学数据库,记录一下所学的知识。我用的MySQL数据库,使用MySQLWorkbench管理。下面简单介绍一下如何使用MySQLWorkbench建立数据库,建立新的表,为表添加数据。  点击上图中的“加号”图标,新建一个连接,    如上图,先输入数据库的账号密码,帐号默认为root,填好密码后点击“OK”,连接就建立好了,建立完成后,会出现一个长方

    2022年9月24日
    3
  • 外键(FOREIGN KEY)

    外键(FOREIGN KEY)引子:把所有数据都存放于一张表的弊端  1、表的组织结构复杂不清晰  2、浪费空间  3、扩展性极差为了解决上述的问题,就需要用多张表来存放数据。表与表的记录之间存在着三种关系:一对多、多对多、一对一的关系。处理表之间关系问题就会利用到FOREIGNKEY多对一关系:寻找表与表之间的关系的套路  举例:雇员表:emp表  部门:dep表    part1:    …

    2022年6月29日
    28
  • Idea激活码最新教程2024.2.0.2版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2024.2.0.2版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2024 2 0 2 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2024 2 0 2 成功激活

    2025年5月28日
    4
  • java编写九九乘法表「建议收藏」

    java编写九九乘法表「建议收藏」案例:java编写九九乘法表,源码如下:packagestart;publicclassstart2{ publicstaticvoidmain(String[]args){ inti,j; for(i=1;i<10;i++){ for(j=1;j<=i;j++){ System.out.print(j+”*”+i+”=”+i*j+”\t”); } System.out.println(); } }}运行结果如下:

    2022年7月15日
    12

发表回复

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

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