import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name = “tb_spec_param”)
@Data
public class SpecParam {
@Id
@KeySql(useGeneratedKeys = true)
private Long id;
private Long cid;
private Long groupId;
private String name;
@Column(name = “numeric
”)
private Boolean numeric;
private String unit;
private Boolean generic;
private Boolean searching;
private String segments;
}
2)实体类对应的通用Mapper
package com.leyou.item.mapper;
import com.leyou.item.pojo.SpecParam;
import tk.mybatis.mapper.common.Mapper;
public interface SpecParamMapper extends Mapper {
}
3)实体类对应的Service,在SpecificationService当中注入SpecParamMapper 即可
@Autowired
private SpecParamMapper specParamMapper;
4)在SpecificationController当中
/*
根据组id查询参数
*/
@GetMapping(“params”)
public ResponseEntity<List> queryParamByGid(@RequestParam(“gid”) Long gid){
return ResponseEntity.ok(specificationService.queryParamByGid(gid));
}
5)完善SpecificationService
创建抛出异常的枚举
SPEC_PARAM_NOT_FOND(404,“商品规格参数不存在”),
完善SpecificationService
public List queryParamByGid(Long gid) {
SpecParam specParam = new SpecParam();
specParam.setGroupId(gid);
List list = specParamMapper.select(specParam);
if(CollectionUtils.isEmpty(list)){
// 没有查询到
throw new LyException(ExceptionEnum.SPEC_PARAM_NOT_FOND);
}
return list;
}
6)重新运行并测试
3、SPU和SKU数据结构
(1)什么是SPU和SKU
SPU: Standard Product Unit(标准产品单位),一组具有共同属性的商品集
SKU: Stock Keeping Unit(库存量单位),SPU商品集因具体特性不同而细分的每个商品
以图为例来看:
-
本页的华为就是一个商品集(SPU)
-
因为颜色、内存等不同,而细分出不同的手机,如亮黑色128G版。(SKU)可以看出;
-
SPU是一个抽象的商品集概念,为了方便后台的管理。
-
SKU才是具体要销售的商品,每一个SKU的价格、库存可能会不一样,用户购买的是SKU而不是SPU
(2)数据库设计分析
1)思考分析
弄清楚了SPU和SKU的概念区分,接下来我们一起思考一下该如何设计数据库表。
首先来看SPU,大家一起思考下SPU应该有哪些字段来描述?
- SPU共享数据
id:主键
title:标题
description:描述
specification:规格
packaging_list:包装
after _service:售后服务
comment:评价
category_id:商品分类
brand_id:品牌
似乎并不复杂
- 再看下SKU(每个商品的特殊属性)
大家觉得应该有什么字段?
id:主健
spu_id:关联的
spuprice:价格
images:图片
stock:库存颜色?
内存?
硬盘?
上述做法是错误的:SKU的特有属性也是变化的。
不同分类特有属性也不一定相同。
2)SKU的特有属性
SPU中会有一些特殊属性,用来区分不同的SKU,我们称为sKU特有属性。如华为META10的颜色、内存属性.不同种类的商品,一个手机,一个衣服,其SKU属性不相同。
同一种类的商品,比如都是衣服,SKU属性基本是一样的,都是颜色、尺码等。
这样说起来,似乎SKU的特有属性也是与分类相关的?事实上,仔细观察你会发现,
SKU的特有属性是商品规格参数的一部分∶
也就是说,我们没必要单独对SKu的特有属性进行设计,它可以看做是规格参数中的一部分。这样规格参数中性可以标记成两部分:
-
所有sku共享的规格属性〈称为通用属性),我们记录在SPU表中。
-
每个sku不同的规格属性(称为特有属性),我们记录在SKU表中。
回一下之前我们设计的tb _spec_param表,是不是有一个字