1. 商品分类实现

1.1 关于商品分类的概述

说明:商品分类信息一般采用3级商品分类的形式
思考: 3级商品分类信息 一般采用什么样的结构进行关联! 一般采用parent_id的方式进行关联

1.2 表结构

说明: 在表中通过parent_id 进行关联
查询一级商品分类信息:
SELECT * FROM item_cat WHERE parent_id=0
SELECT * FROM item_cat WHERE parent_id=1
SELECT * FROM item_cat WHERE parent_id=2

1.3 编辑ItemCat POJO对象

1.4 搭建商品分类层级代码

要求完成pojo/mapper/service/controller的层级代码

1.5 实现商品分类页面跳转


2. 商品分类开发

2.1 实现商品分类列表展现

2.1.1 发起ajax请求

1).利用钩子函数实现数据获取

2).定义商品分类属性

3).发起ajax请求,获取商品分类信息

2.1.2 业务接口文档

2.1.3 查询实现策略

1).左外连接 关联条件 p.id = c.parent_id
实现思路,图中没有筛选字段,所以不能正常执行,需要优化 ,该图只是提供了一种解决思路.

2).for循环写法

 //如何实现3级商品分类的嵌套//SELECT * FROM item_cat WHERE parent_id=0//思考: 1.for循环   2.递归写法   3.尽可能降低数据库查询次数//     3.张三表左外连接    mysql执行速度快   业务执行的速度快//     单表查询快  关联查询快??@Overridepublic List<ItemCat> findItemCatList(Integer type) {/*if(type == 1){ //只查询一级商品分类QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id", 0 );List<ItemCat> oneList = itemCatMapper.selectList(queryWrapper);return oneList;}if(type==2){QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id", 0 );List<ItemCat> oneList = itemCatMapper.selectList(queryWrapper);//根据一级查询二级信息for(ItemCat oneItemCat : oneList){QueryWrapper<ItemCat> queryWrapper2 = new QueryWrapper<>();queryWrapper2.eq("parent_id", oneItemCat.getId());List<ItemCat> twoList = itemCatMapper.selectList(queryWrapper2);oneItemCat.setChildren(twoList);}return oneList;}*/QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id", 0 );List<ItemCat> oneList = itemCatMapper.selectList(queryWrapper);//根据一级查询二级信息if(oneList == null) return null;for(ItemCat oneItemCat : oneList){QueryWrapper<ItemCat> queryWrapper2 = new QueryWrapper<>();queryWrapper2.eq("parent_id", oneItemCat.getId());List<ItemCat> twoList = itemCatMapper.selectList(queryWrapper2);//根据二级查询3级if(twoList == null) return null;for(ItemCat twoItemCat : twoList){QueryWrapper<ItemCat> queryWrapper3 = new QueryWrapper<>();queryWrapper3.eq("parent_id", twoItemCat.getId());List<ItemCat> threeList = itemCatMapper.selectList(queryWrapper3);twoItemCat.setChildren(threeList);}oneItemCat.setChildren(twoList);}return oneList;}

2.1.4 编辑ItemCatController

@RestController
@CrossOrigin
@RequestMapping("/itemCat")
public class ItemCatController {@Autowiredprivate ItemCatService itemCatService;/*** 实现商品分类查询* URL地址:  /itemCat/findItemCatList* 参数: type* 返回值: SysResult对象*/@GetMapping("/findItemCatList/{type}")public SysResult findItemCatList(@PathVariable Integer type){List<ItemCat> itemCatList = itemCatService.findItemCatList(type);return SysResult.success(itemCatList);}}

2.1.5 编辑ItemCatService

//问题: 代码与数据库交互频繁必须优化//思路: 1.只查询一次数据库//      2.Map<parentId,List<ItemCat>>public Map<Integer,List<ItemCat>> getMap(){Map<Integer,List<ItemCat>> map = new HashMap<>();//1.查询所有的数据List<ItemCat> itemCatList =itemCatMapper.selectList(null);//2.封装Map集合数据//2.1存储依据: 如果key存在?获取子级之后add操作//2.2         如果key不存在 则将key存储,同时将自己当做第一个元素保存for (ItemCat itemCat : itemCatList){int parentId = itemCat.getParentId();//判断map集合中是否有父级if(map.containsKey(parentId)){//有父级 将自己添加到子级中map.get(parentId).add(itemCat);}else{List<ItemCat> list = new ArrayList<>();list.add(itemCat);map.put(parentId,list);}}return map;}@Overridepublic List<ItemCat> findItemCatList(Integer type) {Map<Integer,List<ItemCat>> map = getMap();if(type == 1) return map.get(0);if(type == 2) return findTwoItemCatList(map);return findThreeItemCatList(map);}public List<ItemCat> findTwoItemCatList(Map<Integer,List<ItemCat>> map){//1.获取一级商品分类List<ItemCat> oneList = map.get(0);//2.根据一级查询二级for(ItemCat itemCat : oneList){List<ItemCat> twoList = map.get(itemCat.getId());itemCat.setChildren(twoList);}return oneList;}private List<ItemCat> findThreeItemCatList(Map<Integer,List<ItemCat>> map) {List<ItemCat> oneList = findTwoItemCatList(map);for (ItemCat itemCat : oneList){    //1级菜单if(itemCat.getChildren() !=null){for(ItemCat itemCat2 :itemCat.getChildren()){List<ItemCat> threeList = map.get(itemCat2.getId());itemCat2.setChildren(threeList);}}}return oneList;}

2.1.6 页面结果

2.1.7 表格数据的父子关系


数据结构:

2.2 实现商品分类状态修改

2.2.1 页面HTML

2.2.2 页面JS

2.2.3 编辑业务接口

2.2.4 编辑ItemCatController

/*** 实现商品分类状态修改* URL: /itemCat/status/{id}/{status}* 参数:  id/status* 返回值: SysResult对象*/@PutMapping("/status/{id}/{status}")public SysResult updateStatus(ItemCat itemCat){itemCatService.updateStatus(itemCat);return SysResult.success();}

2.2.5 编辑ItemCatService

     //id/status@Overridepublic void updateStatus(ItemCat itemCat) {itemCatMapper.updateById(itemCat);}

2.3 关于SpringMVC注解说明

@RestController 作用范围 类 当前Controller类交给Spring容器管理 同时所有的返回值都是JSON
@CrossOrigin 解决跨域问题的注解 违反了同源策略
@RequestMapping("/itemCat") 作用范围: 类/方法 支持所有的请求类型
-GetMapping("…")
@PathVariable restFul的风格获取数据
1.url地址 /user/{type}
2.方法findItemCatList(@PathVariable Integer type)
3.方法findItemCatList(XX对象) 如果对象的属性与{名称}一致 则可以省略注解.

2.4 商品分类新增

2.4.1 编辑新增页面

2.4.2 级联选择器

属性说明: v-model 用户选中的元素的数据绑定
options: 级联选择器的 数据的来源 如果有children属性,默认解析为父子关系.
props: 设定选择器的运行方式 点击运行,还是触发运行.

2.4.3 编辑页面JS

2.4.4 业务接口文档

2.4.5 编辑ItemCatController

2.4.6 编辑ItemCatService

注意事务控制:

2.5 商品删除实现

2.5.1 要求

说明: 如果删除的数据有子级,则应该将子级一齐删除.

2.5.2 页面分析

2.5.3 页面JS

2.5.4 删除的接口文档

2.5.5 编辑ItemCatController

 /*** 删除商品分类数据* URL:  http://localhost:8091/itemCat/deleteItemCat?id=1&level=1* 参数: id/level* 返回值: SysResult对象*/@DeleteMapping("/deleteItemCat")public SysResult deleteItemCat(ItemCat itemCat){itemCatService.deleteItemCat(itemCat);return SysResult.success();}

2.5.6 编辑ItemCatService

 /*** 实现商品分类删除* @param itemCat* 实现思路:*      根据level 判断层级  之后根据ID删除数据.* 删除: 1.手写sql delete from item_cat where id in(100,200...)*       2.利用MP机制实现删除*/@Overridepublic void deleteItemCat(ItemCat itemCat) {//1.判断等级是否为3级if(itemCat.getLevel() == 3){itemCatMapper.deleteById(itemCat.getId());}if(itemCat.getLevel() == 2) {//1.先删除3级信息QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("parent_id", itemCat.getId());itemCatMapper.delete(queryWrapper);//2.再删除自己itemCatMapper.deleteById(itemCat.getId());}if(itemCat.getLevel() == 1){//1.查询所有的二级菜单QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();queryWrapper.eq("parent_id", itemCat.getId());List<ItemCat> twoList = itemCatMapper.selectList(queryWrapper);for(ItemCat itemCat2 : twoList){//parent_id=二级的IdQueryWrapper queryWrapper2 = new QueryWrapper();queryWrapper2.eq("parent_id", itemCat2.getId());itemCatMapper.delete(queryWrapper2);//删除3级itemCatMapper.deleteById(itemCat2.getId());//删除2级}itemCatMapper.deleteById(itemCat.getId());}}

2.6 商品分类修改

2.6.1 页面HTML分析


2.6.2 编辑页面JS

2.6.3 编辑ItemCatController

/*** URL地址:/itemCat/updateItemCat* 参数: 修改的form表单 json串* put请求*/@PutMapping("/updateItemCat")public SysResult updateItemCat(@RequestBody ItemCat itemCat){itemCatService.updateItemCat(itemCat);return SysResult.success();}

2.6.4 编辑ItemCatService

 @Overridepublic void updateItemCat(ItemCat itemCat) {itemCatMapper.updateById(itemCat);}

CGB2102-京淘项目day15相关推荐

  1. boot sprint 项目结构_京淘项目03 08.28

    JSP动态web资源,打war包 ##spring boot整合JSP 创建项目 spring SpringBoot整合web资源,, 在main文件下,新建webapp文件夹,,把WEBINF目录粘 ...

  2. 京淘项目实战开发-01

    1.京淘项目架构设计 1.1电商网站行业特点 1.1.1 高并发 概念: 同一时间内,有大量的用户访问服务器. 常识: tomcat服务器能够支持的并发链接数 220个/秒 (软件依赖硬件设备) 生产 ...

  3. Lesson9 【LINUX】将京淘项目发布到Linux系统上

    前言 将京淘项目发布到Linux系统上 我在windows系统中已经用IDEA编写好了京淘项目的代码,并且打好了war包. 现在我就想把这个京淘项目发布到linux系统上. 因为在工作中,都是要将项目 ...

  4. 2003京淘项目Day-03京淘后台项目搭建

    1.SpringBoot 整合JSP 1.1 创建项目 1.1.1 创建项目 1.1.2 编辑POM.xml文件 添加继承/依赖/插件 <!--parent标签作用:管理所有被springBoo ...

  5. 京淘项目Day-04

    1.关于项目打包/发布问题说明 1.1 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的. 1.2 mave ...

  6. CGB2009-京淘项目DAY15

    1. 实现用户信息校验 1.1 页面分析 1.2 页面JS解析 1.3 用户数据校验接口文档规范 1.4 编辑JT-SSO UserController package com.jt.controll ...

  7. 【后端结合】新程序猿笔记Day13(京淘项目)

    1. 用户模块管理 1.1 用户列表展现 1.1.1 业务接口文档 请求路径: /user/list 请求类型: GET 请求参数: 后台使用PageResult对象接收 请求案例: http://l ...

  8. 京淘项目业务接口文档

    一 用户登陆 1 用户登录验证接口 请求路径: /user/login 请求方式: POST 请求参数 参数名称 参数说明 备注 username 用户名 不能为空 password 密码 不能为空 ...

  9. 京淘项目模块分析:用户登;三级列表展现

    文章目录 用户登录 用户登录验证接口 返回的SysResult对象 用户登录业务流程 MD5说明 编辑UserController 编辑UserService UserServiceImpl User ...

  10. 关于京淘项目虚拟机IP修改说明

    0. 修改虚拟机MAC地址 当新建虚拟机时,修改mac网络地址. 0.Window 配置IP地址 1).修改IP地址 2).设定IP租用时间 3).检查windowsIP地址 4).检查LinuxIP ...

最新文章

  1. docker制作镜像篇(基于容器)
  2. C++对象模型1——类对象的sizeof、static成员、对象模型、this指针
  3. Web开发学习点滴(持续更新)
  4. reactjs使用eject暴露webpack核心配置
  5. 网络爱好者必知的国内十大知名Linux系统版本
  6. 论文浅尝 - JWS2020 | FEEL: 实体抽取和链接的集成框架
  7. HTML5学习笔记(二)
  8. bcdedit添加linux引导,Linux_利用Bcdedit创建Linux系统引导,Bcdedit在Windows Vista中的一个命 - phpStudy...
  9. MSDN上的Mutex代码及其执行结果
  10. firefox改html内容,Firefox 中的 HTML5 音视频
  11. 【原创】EXCEL筛选后数据求平均值
  12. 科学计算三维可视化---Mlab基础(鼠标选取交互操作)
  13. C# , 删除字符串中指定字符的几种方法
  14. 高级软件测试技术-小组任务分配和安排-Day01
  15. python opencv 保存图片_【python-opencv 】一、图像的加载与保存
  16. 【电脑常用办公软件】万彩办公大师教程丨全能视频转换工具
  17. 韦达定理与一元二次方程求根公式的关系
  18. 一箭穿心的c语言编程,《用C语言函数实现心形图案和一箭穿心图案的显示》.pdf...
  19. Wikibon:英伟达如何通过人工智能抢夺数据中心市场?
  20. 「六」创建一个带 weblogic 服务的基础镜像

热门文章

  1. 微服务架构 — 服务治理 — 服务调用链可视化
  2. 5 分钟完成 Nginx 直播服务部署(直播 + 分流 + 画面水印)
  3. Ubuntu使用OneDrive记录:更换账户或修改密码之后重新登
  4. Odoo启动过程详解
  5. apache负载均衡 健康检查_Apache服务器配置负载均衡的方法 - Apache - 数安时代(GDCA)SSL证书官网...
  6. 《HTML5+CSS3+JavaScript前端开发从零开始学(视频教学版)》简介
  7. (148)FPGA高扇出信号优化方法(三)
  8. Python爬取京东iphone8的异步加载评论
  9. python之父是哪个国家的品牌_Python4要来了?快来看看Python之父怎么说
  10. 基于LabVIEW的通信系统设计与实现