青橙商城项目总结

day03_模板与分类管理

设计模式:SSM;分库分表

技术栈:黑马架构师;vue;Element UI

学习目标:

1)使用“黑马架构师”完成代码生成

\1.

建立数据库表,并设置字段的中文备注(中文备注用于作为生成表格的标题)

\2.

双击codeutil-2.5.jar 或start.bat运行程序,输入用户名和密码,点击测试连接,选择数据库表后点击“下一步”。

\3.

选择模板,输入基本信息,注意:包名一定要3级,例如 com.itheima.goods 前两级

为模块名称,第三级为模块名称。

\4.

点击生成后,用IDE 打开代码后即可运行。

2)完成规格参数模板管理

修改SpecServiceImpl的add方法:

/*** 新增 * @param spec */ @Transactional public void add(Spec spec) { specMapper.insert(spec);
//将模板中的规格数量+1 Template template = templateMapper.selectByPrimaryKey(spec.getTemplateId()); template.setSpecNum( template.getSpecNum()+1 ); templateMapper.updateByPrimaryKey(template); }

修改SpecServiceImpl的delete方法:

/*** 删除 * @param id */ @Transactional public void delete(Integer id) { //将模板中的规格数量减一 Spec spec = specMapper.selectByPrimaryKey(id); Template template = templateMapper.selectByPrimaryKey(spec.getTemplateId()); template.setSpecNum( template.getSpecNum()‐1 ); templateMapper.updateByPrimaryKey(template); specMapper.deleteByPrimaryKey(id); }

3)完成商品分类管理

queryByParentId(parentId){
this.parentIds.push(this.searchMap.parentId)
this.searchMap.parentId=parentId; this.fetchData();//加载数据 },
returnQuery(){ //上级查询 //获取上级ID if(this.parentIds.length>0){ this.searchMap.parentId= this.parentIds[this.parentIds.length‐1] this.parentIds.splice( this.parentIds.length‐1,1 );//截掉最后一个 this.fetchData();//加载数据} }

4)完成图片库管理

day04_商品管理后端逻辑

设计模式:SSM;

技术栈:snowflake;

学习目标:

1)掌握分布式ID生成器(snowflake)的使用

背景:

数据的量级也是呈指数的增长

如何实现数据库分片?我们通常会使用mycat数据库中间件来解决。

分布式ID生成方法:

(1)UUID

(2)Redis生成ID

(3)开源算法snowflake

形式:时间戳+机器id+序列号

代码:

IdWorker idWorker=new IdWorker(1,1);
for(int i=0;i<10000;i++){ long id = idWorker.nextId(); System.out.println(id); }

配置XML:

<!‐‐雪花ID生成器‐‐>
<bean id="idWorker" class="com.qingcheng.util.IdWorker">
<constructor‐arg index="0" value="1"></constructor‐arg>
<constructor‐arg index="1" value="1"></constructor‐arg>
</bean>

完成新增和修改商品的后端逻辑

SPU = Standard Product Unit (标准产品单位)

SKU=stock keeping unit(库存量单位)

/*** 保存商品 * @param goods */
@Transactional
public void saveGoods(Goods goods) { //保存一个spu的信息 Spu spu = goods.getSpu(); spu.setId(idWorker.nextId()+""); spuMapper.insert(spu); //保存sku列表的信息...//sku名称 =spu名称+规格值列表 String name=spu.getName(); //sku.getSpec() {"颜色":"红","机身内存":"64G"} Map<String,String> specMap = JSON.parseObject(sku.getSpec(), Map.class); for(String value:specMap.values()){ name+=" "+value;}

建立分类与品牌的关联

多对多:设计中间表;在保存商品时保存关联信息

CategoryBrand categoryBrand =new CategoryBrand(); categoryBrand.setBrandId(spu.getBrandId()); categoryBrand.setCategoryId(spu.getCategory3Id()); int count=categoryBrandMapper.selectCount(categoryBrand); if(count==0) { categoryBrandMapper.insert(categoryBrand); }

查询商品:

/*** 根据ID查询商品 * @param id * @return */
public Goods findGoodsById(String id){//查询spu Spu spu = spuMapper.selectByPrimaryKey(id); //查询SKU 列表 Example example=new Example(Sku.class); Example.Criteria criteria = example.createCriteria();criteria.andEqualTo("spuId",id); List<Sku> skuList = skuMapper.selectByExample(example); //封装,返回 Goods goods=new Goods(); goods.setSpu(spu); goods.setSkuList(skuList); return goods; }

修改和新增商品:

 //保存一个spu的信息 Spu spu = goods.getSpu(); if(spu.getId()==null){//新增商品spu.setId(idWorker.nextId()+""); spuMapper.insert(spu); }else{ //修改 //删除原来的sku列表 Example example=new Example(Sku.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("spuId",spu.getId()); skuMapper.deleteByExample(example); //执行spu的修改 spuMapper.updateByPrimaryKeySelective(spu); }

完成商品审核与上下架的后端逻辑

/*** 商品审核 * @param id * @param status * @param message */ @Transactional
public void audit(String id, String status, String message) { //1.修改状态 审核状态和上架状态Spu spu = new Spu(); spu.setId(id); spu.setStatus(status); if("1".equals(status)){//审核通过spu.setIsMarketable("1");//自动上架 }spuMapper.updateByPrimaryKeySelective(spu);}/*** 下架商品 * @param id */
public void pull(String id) { Spu spu = spuMapper.selectByPrimaryKey(id); spu.setIsMarketable("0");//下架状态 spuMapper.updateByPrimaryKeySelective(spu); }/*** 商品上架 * @param id */
public void put(String id) {//1.修改状态 Spu spu = spuMapper.selectByPrimaryKey(id); if(!"1".equals(spu.getStatus())){ throw new RuntimeException("此商品未通过审核"); }spu.setIsMarketable("1"); spuMapper.updateByPrimaryKeySelective(spu); // }/*** 批量上架商品 * @param ids */ public int putMany(Long[] ids) { Spu spu=new Spu(); spu.setIsMarketable("1");//上架 //批量修改 Example example=new Example(Spu.class); Example.Criteria criteria = example.createCriteria(); criteria.andIn("id", Arrays.asList(ids));//id criteria.andEqualTo("isMarketable","0");//下架 criteria.andEqualTo("status","1");//审核通过的 criteria.andEqualTo("isDelete","0");//非删除的 return spuMapper.updateByExampleSelective(spu, example); }

青橙商城项目总结day03-04相关推荐

  1. 青橙商城项目总结day02

    青橙商城项目总结 day02_品牌管理前端与图片上传 技术栈:Element UI:ES6:Spring:OSS 学习目标: 1)ElementUI常用组件:https://element.eleme ...

  2. 【青橙商城-管理后台开发】2. 商品服务模块搭建

    [青橙商城-管理后台开发]2. 商品服务模块搭建 1. 服务层模块-商品 pom.xml <dependencies><dependency><groupId>co ...

  3. 【青橙商城-管理后台开发】3. web模块搭建

    [青橙商城-管理后台开发]3. web模块搭建 1.创建qingcheng_web_manager模块 pom.xml <?xml version="1.0" encodin ...

  4. 青橙商城day02(持续更新)

    一.ElementUI介绍 1.1 什么是ES6 变量声明let ES6之前我们都是使用var声明变量,无论什么在哪里,都是会被视为声明在函数的最顶部(在函数内即是在全局作用域的最顶部),这就是函数变 ...

  5. SSM实战项目_青橙商城学习笔记和踩坑指南

    目的 本篇博客主要为了总结在学习开发实战项目中遇到的问题,提高自己的学习效率,也为其他遇到类似bug的后来者提供帮助. 2019/12/14.开篇就遇到tomcat启动问题:启动dubbo项目交替出现 ...

  6. 安排,Java青橙商城前后台全栈开发项目实战与秒杀架构

    来源: 来自网络,如侵权请告知博主删除

  7. 青橙商城13 用户名密码加密、用户注册+验证码

    1.用户名密码加密 2.用户注册+验证码 首先定义一个输入手机然后就返回验证码给你: 然后定义控制层调用上面的接口: 添加用户: 就是用户注册时,点击手机注册, 会输入手机,然后发送验证码,那么我们就 ...

  8. 青橙商城-day4 spu、sku、逻辑删除

    1.SPU和SKU SPU就是比如小米10手机,SKU可以是小米10 128G或266G的. 与前面讲的手机模板.手机参数.手机规格不一样哦. 可以这样说:模板>SPU>SKU>规格 ...

  9. 青橙商城-day01

    1. 先在Service定义一个接口随便起名eg接口1,然后再在serviceImpl调用通用mapper里面的方法,然后在controller使用dubbo的@Reference来调用service ...

最新文章

  1. 机器学习数学基础:随机事件与随机变量
  2. POJ 2112 Optimal Milking(二分图匹配)
  3. 《西线无战事》:合上书的那一刻:只想痛哭
  4. java求二阶微积分方程特解_Scipy:实现微分方程的两种方法:两种不同的解决方案:回答...
  5. 矩阵标准型的系数是特征值吗_高等代数|第五章 二次型二次型及其标准型
  6. built a JNCIS LAB系列:Chapter 9 L3××× L2×××
  7. Batman+joker乱谈
  8. word排版案例报告_文章为什么要排版?如何排版?这篇文章告诉你真相
  9. 最新版2020.11版本Anaconda百度网盘提取下载
  10. 赣州旅游职业学校学计算机,赣州旅游职业学校是公办的吗
  11. Transformer课程 第7课Gavin大咖 BERT文本分类-BERT Fine-Tuning
  12. 时间序列之ARIMA模型原理
  13. WIN11win10 使用Anaconda下载Pytorch详细教程(包括换源)
  14. SQLPub免费的MySQL数据库
  15. mac版免费吃鸡游戏(荒野行动)
  16. Error in value[[3L]](cond) : Package ‘rhdf5‘ version 2.36.0 cannot be unloaded:
  17. sticky INTENT
  18. 数据挖掘需要什么数学基础(一)
  19. 看看Pwn2Own黑客大赛有哪些新技术
  20. WIN Vista系统汇总!!![讯雷下载]

热门文章

  1. K39 ITX 桌面小机箱
  2. 用“心”管理,收获人心
  3. 戴骨传导耳机会头晕?骨传导耳机真的好吗?
  4. [音乐天堂]Ernest gold -《出埃及记》
  5. 关于undefined的含义
  6. 使用 JavaScript 进行单词发音 Use JavaScript to Speech Your Text
  7. 互联网养猪10年,网易们改变了什么?
  8. 直流3V电压升压到3.3V的PCB板(使用AD)
  9. ARCGIS空间分析——提取青藏高原每个县的平均DEM值
  10. 基于人脸图像的人脸互换人脸融合以及基于特征向量的人脸处理 附完整代码