SPU和SKU详解及MyBatisPlus自动生成

2-2 SPU和SKU详解

??商城系统中的商品信息肯定避免不了SPU和SKU这两个概念,本节就给大家详细介绍下这块的内容

1、掌握SKU和SPU关系

SPU = Standard Product Unit (标准化产品单元)

SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。

SKU=stock keeping unit(库存量单位)

SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。

SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。在服装、鞋类商品中使用最多最普遍。

举个例子:

购买手机的时候,你可以选择华为Mate40系列手机,Mate40系列手机的生产制造商是华为,品牌是华为,手机分类也是华为,不过Mate40系列手机有多款,比如 Mate40 、Mate40 Pro 、 Mate40 Pro +,每款手机的架构也不一样,颜色也不一定一样,那么这个例子中哪些是Spu哪些是Sku呢?

Spu:

手机系列:Mate40系列厂家:华为品牌:华为分类:手机

Sku:

价格颜色 络格式

2、表结构设计

2.1 Spu和Sku

spu:

sku:

CREATE TABLE `sku` (  `id` varchar(60) NOT NULL COMMENT '商品id',  `name` varchar(200) NOT NULL COMMENT 'SKU名称',  `price` int(20) NOT NULL DEFAULT '1' COMMENT '价格(分)',  `num` int(10) DEFAULT '100' COMMENT '库存数量',  `image` varchar(200) DEFAULT NULL COMMENT '商品图片',  `images` varchar(2000) DEFAULT NULL COMMENT '商品图片列表',  `create_time` datetime DEFAULT NULL COMMENT '创建时间',  `update_time` datetime DEFAULT NULL COMMENT '更新时间',  `spu_id` varchar(60) DEFAULT NULL COMMENT 'SPUID',  `category_id` int(10) DEFAULT NULL COMMENT '类目ID',  `category_name` varchar(200) DEFAULT NULL COMMENT '类目名称',  `brand_id` int(11) DEFAULT NULL COMMENT '品牌id',  `brand_name` varchar(100) DEFAULT NULL COMMENT '品牌名称',  `sku_attribute` varchar(200) DEFAULT NULL COMMENT '规格',  `status` int(1) DEFAULT '1' COMMENT '商品状态 1-正常,2-下架,3-删除',  PRIMARY KEY (`id`),  KEY `cid` (`category_id`),  KEY `status` (`status`),  KEY `updated` (`update_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

2.2 商品发布流程分析

商品发布流程如下:

1)分类选择

发布商品前,需要先选择发布商品所属分类,分类严格定义为3级分类。

分类表:

CREATE TABLE `category` (  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID',  `name` varchar(50) DEFAULT NULL COMMENT '分类名称',  `sort` int(11) DEFAULT NULL COMMENT '排序',  `parent_id` int(20) DEFAULT NULL COMMENT '上级ID',  PRIMARY KEY (`id`),  KEY `parent_id` (`parent_id`)) ENGINE=InnoDB AUTO_INCREMENT=11182 DEFAULT CHARSET=utf8 COMMENT='商品类目';

2)选择品牌

分类选择完成后,需要加载品牌,品牌加载并非一次性加载完成,而是根据选择的分类进行加载。

分类品牌关系表:

CREATE TABLE `category_brand` (  `category_id` int(11) NOT NULL COMMENT '分类ID',  `brand_id` int(11) NOT NULL COMMENT '品牌ID',  PRIMARY KEY (`brand_id`,`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

品牌表:

CREATE TABLE `brand` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '品牌id',  `name` varchar(100) NOT NULL COMMENT '品牌名称',  `image` varchar(1000) DEFAULT '' COMMENT '品牌图片地址',  `initial` varchar(1) DEFAULT '' COMMENT '品牌的首字母',  `sort` int(11) DEFAULT NULL COMMENT '排序',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='品牌表';

3)属性加载

当选择分类后,加载分类对应的属性。

分类属性表:

CREATE TABLE `category_attr` (  `category_id` int(11) NOT NULL,  `attr_id` int(11) NOT NULL COMMENT '属性分类表',  PRIMARY KEY (`category_id`,`attr_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

属性表:

CREATE TABLE `sku_attribute` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',  `name` varchar(50) DEFAULT NULL COMMENT '属性名称',  `options` varchar(2000) DEFAULT NULL COMMENT '属性选项',  `sort` int(11) DEFAULT NULL COMMENT '排序',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

3、 商品发布加载功能

对应的Bean我们已经提前写好,如下

package com.bobo.vip.mall.goods.model;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "category")public class Category implements Serializable {    @TableId(type = IdType.AUTO)    private Integer id;    private String name;    private Integer sort;    private Integer parentId;}
package com.bobo.vip.mall.goods.model;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "category_attr")public class CategoryAttr {    @TableField    private Integer categoryId;    @TableField    private Integer attrId;}
/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "category_brand")public class CategoryBrand {    @TableField    private Integer categoryId;    @TableField    private Integer brandId;}
/***** * @Author: 波波 * @Description: 云商城 ****/@Data@NoArgsConstructor@AllArgsConstructorpublic class Product {    // Spu    private Spu spu;    // Sku    private List<Sku> skus;}1234567891011121314
@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "sku")public class Sku {    @TableId(type = IdType.ASSIGN_ID)    private String id;    private String name;    private Integer price;    private Integer num;    private String image;    private String images;    private Date createTime;    private Date updateTime;    private String spuId;    private Integer categoryId;    private String categoryName;    private Integer brandId;    private String brandName;    private String skuAttribute;    private Integer status;}
/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "sku_attribute")public class SkuAttribute implements Serializable {    @TableId(type = IdType.AUTO)    private Integer id;    private String name;    private String options;    private Integer sort;    //对应分类    @TableField(exist = false)    private List<Category> categories;}12345678910111213141516171819202122
@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "spu")public class Spu {    @TableId(type = IdType.ASSIGN_ID)    private Stri

                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月19日
下一篇 2021年1月19日

相关推荐