规格参数与分类管理
我们本小节只需同学们理解管理后台规格参数与分类管理的需求和表结构的设计,没有代码实现,因为管理后台所需的代码在基础工程中已经帮我们生成了,无需自己编写。
规格参数管理#
需求分析#
规格参数模板是用于管理规格参数的单元。规格是例如颜色、手机运行内存等信息,参数是例如系统:安卓(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); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)