规格参数与分类管理
我们本小节只需同学们理解管理后台规格参数与分类管理的需求和表结构的设计,没有代码实现,因为管理后台所需的代码在基础工程中已经帮我们生成了,无需自己编写。
规格参数管理
需求分析
规格参数模板是用于管理规格参数的单元。规格是例如颜色、手机运行内存等信息,参数是例如系统:安卓(Android)后置摄像头像素:2000万及以上 热点:快速充电等信息 。
前端交互方式见管理后台的静态原型
表结构分析
规格参数模板相关的表有3个
tb_template表(模板表)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | ID | INT | ||
name | 模板名称 | VARCHAR | ||
spec_num | 规格数量 | INT | ||
para_num | 参数数量 | INT |
tb_spec表(规格表)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | ID | INT | ||
name | 名称 | VARCHAR | ||
options | 规格选项 | VARCHAR | ||
seq | 排序 | INT | ||
template_id | 模板ID | INT |
tb_para表(参数表)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | id | INT | ||
name | 名称 | VARCHAR | ||
options | 选项 | VARCHAR | ||
seq | 排序 | INT | ||
template_id | 模板ID | INT |
模板与规格是一对多关系 ,模板与参数是一对多关系
分类管理
需求分析
商品分类一共分三级管理,主要作用是在网站首页中显示商品导航,以及在管理后台管理商品时使用。
表结构分析
tb_category 表 (商品分类)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | 分类ID | INT | ||
name | 分类名称 | VARCHAR | ||
goods_num | 商品数量 | INT | ||
is_show | 是否显示 | CHAR | 0 不显示 1显示 | |
is_menu | 是否导航 | CHAR | 0 不时导航 1 为导航 | |
seq | 排序 | INT | ||
parent_id | 上级ID | INT | ||
template_id | 模板ID | INT |
商品分类与模板是多对一关系
通用mapper自定义方法
根据商品分类名称查询品牌列表
表结构分析
基于上述的讲解已知分类与品牌之间的关系属于多对多关系,这里通过tb_category_brand表来建立关联关系。
分类-品牌中间表
列名 | 类型 | 说明 |
---|---|---|
category_id | int(11) | 分类ID |
brand_id | int(11) | 品牌ID |
代码实现
(1)修改BrandMapper,新增方法定义
/** * 根据分类名称查询品牌列表 * @param categoryName * @return */ @Select("SELECT name,image FROM tb_brand WHERE id IN (SELECT brand_id FROM tb_category_brand WHERE category_id IN (SELECT id FROM tb_category WHERE NAME=#{name}) )order by seq") public List<Map> findListByCategoryName(@Param("name") String categoryName);
(2)修改BrandService,新增方法定义
/** * 根据商品分类名称查询品牌列表 * @param categoryName * @return */ public List<Map> findListByCategoryName(String categoryName);
3)BrandServiceImpl实现方法
@Override public List<Map> findListByCategoryName(String categoryName) { return brandMapper.findListByCategoryName(categoryName); }
(4)BrandController新增方法
/** * 根据分类名称查询品牌列表 * @param category * @return */ @GetMapping("/category/{category}") public Result findListByCategoryName(@PathVariable String category){ System.out.println(category); List<Map> brandList = brandService.findListByCategoryName(category); return new Result(true,StatusCode.OK,"查询成功",brandList); }
根据商品分类名称查询规格列表
表结构分析
我们这里会用到规格表、模板表、分类表 注意:以下表结构已省略无关字段
tb_template 表(模板表)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | ID | INT | ||
name | 模板名称 | VARCHAR |
tb_spec 表( 规格表)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | ID | INT | ||
name | 名称 | VARCHAR | ||
options | 规格选项 | VARCHAR | ||
seq | 排序 | INT | ||
template_id | 模板ID | INT |
tb_category 表 (商品分类)
字段名称 | 字段含义 | 字段类型 | 字段长度 | 备注 |
---|---|---|---|---|
id | 分类ID | INT | ||
name | 分类名称 | VARCHAR | ||
parent_id | 上级ID | INT | ||
template_id | 模板ID | INT |
代码实现
(1)SpecMapper新增方法定义
@Select("SELECT name,options FROM tb_spec WHERE template_id IN ( SELECT template_id FROM tb_category WHERE NAME=#{categoryName}) order by seq") public List<Map> findListByCategoryName(@Param("categoryName") String categoryName);
(2)SpecService新增方法定义
/** * 根据商品分类名称查询规格列表 * @param categoryName * @return */ public List<Map> findListByCategoryName(String categoryName);
(3)SpecServiceImpl实现方法
@Override public List<Map> findListByCategoryName(String categoryName) { List<Map> specList = specMapper.findListByCategoryName(categoryName); for(Map spec:specList){ String[] options = ((String) spec.get("options")).split(",");//规格选项列表 spec.put("options",options); } return specList; }
(4)SpecController新增方法
/** * 根据商品分类名称查询规格列表 * @param category * @return */ @GetMapping("/category/{category}") public Result findListByCategoryName(@PathVariable String category){ List<Map> specList = specService.findListByCategoryName(category); return new Result(true,StatusCode.OK,"",specList); }