Loading

规格参数与分类管理

我们本小节只需同学们理解管理后台规格参数与分类管理的需求和表结构的设计,没有代码实现,因为管理后台所需的代码在基础工程中已经帮我们生成了,无需自己编写。

规格参数管理

需求分析

规格参数模板是用于管理规格参数的单元。规格是例如颜色、手机运行内存等信息,参数是例如系统:安卓(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);
}

 

posted @ 2021-08-02 16:35  1640808365  阅读(280)  评论(0编辑  收藏  举报