大数据最全电商+支付双系统项目------实现电商系统中分类模块的开发!

通过上面两幅图,先带大家直观感受下分类模块大概是个啥,脑子里有个画面。

再来通过一个例子了解一下商品分类层级结构:

  • 服装(Clothing)
    • 男装(Men’s Clothing)
      • 衬衫(Shirts)
      • 裤子(Pants)
      • 外套(Jackets)
    • 女装(Women’s Clothing)
      • 连衣裙(Dresses)
      • 上衣(Tops)
      • 裙子(Skirts)
  • 鞋类(Shoes)
    • 男鞋(Men’s Shoes)
      • 运动鞋(Athletic Shoes)
      • 皮鞋(Dress Shoes)
    • 女鞋(Women’s Shoes)
      • 高跟鞋(High Heels)
      • 平底鞋(Flats)

在导航菜单中显示主分类(例如"服装"和"鞋类"),在各自的子菜单中显示子分类(例如"男装"和"女装")。

商品分类和垃圾分类区别不大。

了解完分类模块到底是什么后,我们应该想想如何设计分类模块的代码?我们还是从Dao层->service层->controller层这个开发顺序。

设计Dao层

package com.imooc.mall.dao;

import com.imooc.mall.pojo.Category;

import java.util.List;

public interface CategoryMapper {
    int deleteByPrimaryKey(Integer id); //根据主键id删除对应的商品分类记录

    int insert(Category record);  //插入一条商品分类记录

    int insertSelective(Category record);  //选择性地插入一条商品分类记录,只插入非空字段

    Category selectByPrimaryKey(Integer id);  //根据主键id查询对应的商品分类记录

    int updateByPrimaryKeySelective(Category record);  //选择性地更新商品分类记录,只更新非空字段

    int updateByPrimaryKey(Category record);  //更新商品分类记录的所有字段

    List<Category> selectAll();  //查询所有的商品分类记录,返回一个商品分类列表
}

上面的代码是一个名为CategoryMapper的接口,它定义了对商品分类数据进行操作的方法。这些方法定义了对商品分类表的常见操作,包括插入、更新、删除和查询等。它们提供了对商品分类数据的基本访问功能,供其他组件(如服务层)使用。实际的数据操作逻辑需要在CategoryMapper的实现类中进行实现。

关于这些方法的实现类真的很复杂,我的建议是了解一下就好,不算太重点,实现类其实就长这样:

Dao层设计好了我们接着来设计service层

设计service层

package com.imooc.mall.service;

import com.imooc.mall.vo.CategoryVo;
import com.imooc.mall.vo.ResponseVo;

import java.util.List;
import java.util.Set;


public interface ICategoryService {

	ResponseVo<List<CategoryVo>> selectAll();

	void findSubCategoryId(Integer id, Set<Integer> resultSet);
}

上面的代码是一个名为ICategoryService的接口,它定义了商品分类相关的服务方法。

这些方法定义了商品分类服务的功能,主要用于查询和处理商品分类相关的业务逻辑。

selectAll()方法用于获取所有商品分类的信息,而findSubCategoryId()方法用于查找指定分类下的所有子分类的主键id。这些方法可以被其他组件(如控制器层)调用,以实现具体的业务需求。

这里只提供了接口定义,并没有给出具体的实现逻辑。实际的业务逻辑需要在ICategoryService的实现类中进行编写。我们接下来就讲讲怎么编写这些实现类。

package com.imooc.mall.service.impl;

import com.imooc.mall.dao.CategoryMapper;
import com.imooc.mall.pojo.Category;
import com.imooc.mall.service.ICategoryService;
import com.imooc.mall.vo.CategoryVo;
import com.imooc.mall.vo.ResponseVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static com.imooc.mall.consts.MallConst.ROOT_PARENT_ID;


@Service
public class CategoryServiceImpl implements ICategoryService {

	@Autowired
	private CategoryMapper categoryMapper;

	/**
	 * 耗时:http(请求微信api) > 磁盘 > 内存
	 * mysql(内网+磁盘)
	 * @return
	 */
	@Override
	public ResponseVo<List<CategoryVo>> selectAll() {
		List<Category> categories = categoryMapper.selectAll();

		//查出parent_id=0
//		for (Category category : categories) {
//			if (category.getParentId().equals(ROOT_PARENT_ID)) {
//				CategoryVo categoryVo = new CategoryVo();
//				BeanUtils.copyProperties(category, categoryVo);
//				categoryVoList.add(categoryVo);
//			}
//		}

		//lambda + stream
		List<CategoryVo> categoryVoList = categories.stream()
				.filter(e -> e.getParentId().equals(ROOT_PARENT_ID))
				.map(this::category2CategoryVo)
				.sorted(Comparator.comparing(CategoryVo::getSortOrder).reversed())
				.collect(Collectors.toList());

		//查询子目录
		findSubCategory(categoryVoList, categories);

		return ResponseVo.success(categoryVoList);
	}

	@Override


![img](https://img-blog.csdnimg.cn/img_convert/371fc32f816a7942abb9f7844111161b.png)
![img](https://img-blog.csdnimg.cn/img_convert/afcac522f97d2e0093eaf868e0898184.png)
![img](https://img-blog.csdnimg.cn/img_convert/0713f7b75c74ec998828c4218bd28c36.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值