当前位置: 首页 > news >正文

谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据

本节的主要内容是在前一节的基础上,提供结构查询出所有的二级、三级分类数据。

一,构造响应体数据结构

后端返回给前端的数据结构是在开发详细设计中应该确定的内容。

分析前端需要的数据结构,后端要将所有一级分类包含的二级和三级分类信息封装好,返回给前端。

以JSON格式返回,JSON最外层是一个对象,这个对象有多个属性,key是所有一级分类的catId。

在这里插入图片描述
属性值是一个数组,包含这个一级分类下所有的二级分类信息。

在这里插入图片描述

每个二级分类对象中,除了包含本身的分类Id外,还包含其所属的一级分类Id,以及其下的所有三级分类信息。

package com.atguigu.gulimall.product.vo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;


public class Catelog2Vo {/*** 一级父分类的id*/private String catalog1Id;/*** 三级子分类*/private List<Category3Vo> catalog3List;private String id;private String name;/*** 三级分类vo*/public static class Category3Vo {/*** 父分类、二级分类id*/private String catalog2Id;private String id;private String name;}}

二,后台接口

后台接口实现并不难,关键在于理解响应体的结构,根据结构进行封装。

public Map<String, List<Catelog2Vo>> getCatalogJson() {System.out.println("查询了数据库");//将数据库的多次查询变为一次List<CategoryEntity> selectList = this.baseMapper.selectList(null);//1、查出所有分类//1、1)查出所有一级分类List<CategoryEntity> level1Categorys = getParentCid(selectList, 0L);//封装数据Map<String, List<Catelog2Vo>> parentCid = level1Categorys.stream().collect(Collectors.toMap(k -> k.getCatId().toString(), v -> {//1、每一个的一级分类,查到这个一级分类的二级分类List<CategoryEntity> categoryEntities = getParentCid(selectList, v.getCatId());//2、封装上面的结果List<Catelog2Vo> catelog2Vos = null;if (categoryEntities != null) {catelog2Vos = categoryEntities.stream().map(l2 -> {Catelog2Vo catelog2Vo = new Catelog2Vo(v.getCatId().toString(), null, l2.getCatId().toString(), l2.getName().toString());//1、找当前二级分类的三级分类封装成voList<CategoryEntity> level3Catelog = getParentCid(selectList, l2.getCatId());if (level3Catelog != null) {List<Catelog2Vo.Category3Vo> category3Vos = level3Catelog.stream().map(l3 -> {//2、封装成指定格式Catelog2Vo.Category3Vo category3Vo = new Catelog2Vo.Category3Vo(l2.getCatId().toString(), l3.getCatId().toString(), l3.getName());return category3Vo;}).collect(Collectors.toList());catelog2Vo.setCatalog3List(category3Vos);}return catelog2Vo;}).collect(Collectors.toList());}return catelog2Vos;}));return parentCid;}private List<CategoryEntity> getParentCid(List<CategoryEntity> selectList, Long parentCid) {List<CategoryEntity> categoryEntities = selectList.stream().filter(item -> item.getParentCid().equals(parentCid)).collect(Collectors.toList());return categoryEntities;}

这段代码主要功能是从数据库中获取商品分类信息并将其组织成特定的数据结构返回。

整个过程可以概括为从数据库中获取所有分类信息,然后根据分类的层级关系(一级、二级、三级)对这些信息进行分组和组织,以便于前端展示或后续处理。

这种方法减少了对数据库的多次查询,提高了性能。

http://www.lryc.cn/news/417080.html

相关文章:

  • git的基础用法
  • 常见中间件漏洞(四、Apache合集)
  • HCIE-学习笔记
  • 【计算机网络】性能指标-带宽和时延(MB、GB、KB、B、byte、bit、Mb/s、Gb/s、b/s等)学习
  • ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?
  • 勒索软件、供应链攻击等带来的思考!
  • 【Nuxt】自定义插件和生命周期
  • MySQL的简单介绍
  • leetcode 116.填充每个节点的下一个右侧结点指针
  • 『 Linux 』网络基础
  • Python酷库之旅-第三方库Pandas(070)
  • 第一篇Linux介绍
  • 在Windows编程中,MFC\C++中OnCopyData如何传递基础类型数据?
  • 10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享
  • BUUCTF [安洵杯 2019]easy_serialize_php 1
  • 前端面试宝典【CSS篇】【5】
  • stem32江科大自学笔记
  • C++-类与对象基础
  • 嵌入式day20
  • UE4 SLUA IOS打包报错解决办法
  • SpringDI(依赖注入) 以及SpringIOC容器对Bean管理
  • 伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)
  • 探索腾讯云AI代码助手的效能与实用性
  • 清华大学终于把Python整理成了《漫画书》
  • 有关Linux操作系统中僵尸进程与孤儿进程的理解
  • Go语言实现依赖注入
  • 不仅能防沉迷游戏的防沉迷软件(Python)
  • 数学建模--智能算法之鱼群算法
  • html+css+js前端作业qq音乐官网5个页面 带js
  • 【mars3d】加载超图s3m模型说明