尚品汇-(十六)

目录

商品详情功能开发

(1)搭建service-item

(2)获取sku基本信息与图片信息

(3)获取分类信息(查看三级分类)


商品详情功能开发

(1)搭建service-item

点击service,选择New–>Module,操作如下

修改配置pom.xml

添加配置文件bootstrap.properties

spring.application.name=service-item
spring.profiles.active=dev
spring.cloud.nacos.discovery.server-addr=192.168.254.165:8848
spring.cloud.nacos.config.server-addr=192.168.254.165:8848
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

添加启动类

因为父模块引入了mysql的依赖,由于自动配置,如果没有配置会报错,我们把他关了

exclude = DataSourceAutoConfiguration.class 排除数据库链接jar

表示当前项目{service-item} 不参与数据库查询

package com.atguigu.gmall.item;@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//取消数据源自动配置
@ComponentScan({"com.atguigu.gmall"})
@EnableDiscoveryClient
@EnableFeignClients(basePackages= {"com.atguigu.gmall"})
public class ServiceItemApplication {public static void main(String[] args) {SpringApplication.run(ServiceItemApplication.class, args);}}

service-item服务接口封装

package com.atguigu.gmall.item.service;public interface ItemService {/*** 获取sku详情信息* @param skuId* @return*/Map<String, Object> getBySkuId(Long skuId);
}

实现类:

@Service
public class ItemServiceImpl implements ItemService {@Autowiredprivate ProductFeignClient  productFeignClient;@Overridepublic Map<String, Object> getBySkuId(Long skuId) {Map<String, Object> result = new HashMap<>();return result;}
}
@RestController
@RequestMapping("api/item")
public class ItemApiController {@Autowiredprivate ItemService itemService;/*** 获取sku详情信息* @param skuId* @return*/@GetMapping("{skuId}")public Result getItem(@PathVariable Long skuId){Map<String,Object> result = itemService.getBySkuId(skuId);return Result.ok(result);}
}

说明:商品详情相关信息在service-product微服务都可以获取,所以我们在service-product模块编写所需要的接口

在service-product微服务提供api接口

(2)获取sku基本信息与图片信息

实体类:

package com.atguigu.gmall.model.product;import com.atguigu.gmall.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.List;/*** <p>* SpuInfo* </p>**/
@Data
@ApiModel(description = "SpuInfo")
@TableName("spu_info")
public class SpuInfo extends BaseEntity {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "商品名称")@TableField("spu_name")private String spuName;@ApiModelProperty(value = "商品描述(后台简述)")@TableField("description")private String description;@ApiModelProperty(value = "三级分类id")@TableField("category3_id")private Long category3Id;@ApiModelProperty(value = "品牌id")@TableField("tm_id")private Long tmId;// 销售属性集合@TableField(exist = false)private List<SpuSaleAttr> spuSaleAttrList;// 商品的图片集合@TableField(exist = false)private List<SpuImage> spuImageList;// 商品的海报图片集合@TableField(exist = false)private List<SpuPoster> spuPosterList;
}

编写接口与实现类

ManageService接口中添加

/*** 根据skuId 查询skuInfo* @param skuId* @return*/
SkuInfo getSkuInfo(Long skuId);

实现类

@Override
public SkuInfo getSkuInfo(Long skuId) {SkuInfo skuInfo = skuInfoMapper.selectById(skuId);// 根据skuId 查询图片列表集合QueryWrapper<SkuImage> queryWrapper = new QueryWrapper<>();queryWrapper.eq("sku_id", skuId);List<SkuImage> skuImageList = skuImageMapper.selectList(queryWrapper);skuInfo.setSkuImageList(skuImageList);return skuInfo;
}

编写控制器

package com.atguigu.gmall.product.api.ProductApiController
@RestController
@RequestMapping("api/product")
public class ProductApiController {@Autowiredprivate ManageService manageService;/*** 根据skuId获取sku信息* @param skuId* @return*/@GetMapping("inner/getSkuInfo/{skuId}")public SkuInfo getAttrValueList(@PathVariable("skuId") Long skuId){SkuInfo skuInfo = manageService.getSkuInfo(skuId);return skuInfo;}

(3)获取分类信息(查看三级分类)

需求分析

sku是挂在三级分类下面的,我们的分类信息分别在base_category1、base_category2、base_category3这三张表里面,目前需要通过sku表的三级分类id获取一级分类名称、二级分类名称和三级分类名称

MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。

特点:

数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。

解决方案:

我们可以建立一个视图(view),把三张表关联起来,视图id就是三级分类id,这样通过三级分类id就可以查询到相应数据,效果如下:

 

创建视图

CREATE VIEW base_category_view AS

select 

c3.id as id,

c1.id as category1_id, c1.name as category1_name,

c2.id as category2_id, c2.name as category2_name,

c3.id as category3_id, c3.name as category3_name

from base_category1 c1

inner join base_category2 c2 on c2.category1_id = c1.id

inner join base_category3 c3 on c3.category2_id = c2.id

对应实体类:

//
//
package com.atguigu.gmall.model.product;import com.atguigu.gmall.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.io.Serializable;/*** <p>* BaseCategoryView* </p>**/
@Data
@ApiModel(description = "BaseCategoryView")
@TableName("base_category_view")
public class BaseCategoryView implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "id")private Long id;@ApiModelProperty(value = "一级分类编号")@TableField("category1_id")private Long category1Id;@ApiModelProperty(value = "一级分类名称")@TableField("category1_name")private String category1Name;@ApiModelProperty(value = "二级分类编号")@TableField("category2_id")private Long category2Id;@ApiModelProperty(value = "二级分类名称")@TableField("category2_name")private String category2Name;@ApiModelProperty(value = "三级分类编号")@TableField("category3_id")private Long category3Id;@ApiModelProperty(value = "三级分类名称")@TableField("category3_name")private String category3Name;}

创建mapper:BaseCategoryViewMapper 

@Mapper
public interface BaseCategoryViewMapper extends BaseMapper<BaseCategoryView> {}
ManageService接口
/*** 通过三级分类id查询分类信息* @param category3Id* @return*/
BaseCategoryView getCategoryViewByCategory3Id(Long category3Id);

接口实现

@Autowired 
private BaseCategoryViewMapper  baseCategoryViewMapper;@Override
public BaseCategoryView getCategoryViewByCategory3Id(Long category3Id) {return baseCategoryViewMapper.selectById(category3Id);
}

编写控制器ProductApiController

/*** 通过三级分类id查询分类信息* @param category3Id* @return*/
@GetMapping("inner/getCategoryView/{category3Id}")
public BaseCategoryView getCategoryView(@PathVariable("category3Id")Long category3Id){return manageService.getCategoryViewByCategory3Id(category3Id);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术&#xff1a;探索Flutter的Provider库 前言 上一篇文章中&#xff0c;我们详细介绍了 Flutter 应用中的状态管理&#xff0c;以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式&#xff1a;Provider。 Provider优缺点 基…

笔记 2 : 课本第 3 章开始,记录 arm 的汇编指令的格式

&#xff08;13&#xff09; 介绍 arm 中的第一个汇编指令的用法 mov &#xff1a; &#xff08;14&#xff09;立即数的概念&#xff1a; &#xff08;15&#xff09; 汇编中的移位写法&#xff1a; 举例 &#xff1a; &#xff08;16&#xff09; 学习一个新的指令 cmp &a…

芯课堂 | Synwit_UI_Creator(ugui)平台之PC端界面设计篇

​今天小编给大家介绍的是华芯微特面向小尺寸TFT-LCD屏驱市场量身打造的Synwit_UI_Creator&#xff08;ugui&#xff09;自研开发套件。 UI_Creator&#xff08;ugui&#xff09;开发套件分为上位机和下位机&#xff0c;以下如无特指&#xff0c;上位机即为PC端设计器/仿真器&…

虚拟机及其Debian(kali)安装

本机电脑为Windows10系统专业版&#xff0c;在此基础上安装VMware和系统&#xff08;Kali&#xff09; 步骤如下 一、安装 VMware Workstation Pro v16.2.4 安装步骤可参照网上博客&#xff0c;该步骤较简单&#xff0c;此处不做讲解。文件中共计两个&#xff0c;其中一个是激活…

【ProtoBuf】在 Windows / Linux 安装 ProtoBuf(超详细教程)

一、ProtoBuf 在 Window 下的安装 1、下载 ProtoBuf 编译器 下载地址&#xff1a;github.com 可以不用下载最新版本&#xff0c;具体的下载根据自己电脑情况选择。 下载之后将压缩包解压到本地目录下。解压后的文件内包含 bin、include 文件&#xff0c;以及一个 readme.txt…

基于SSM框架的宠物领养系统【附源码和运行步骤】

基于SSM框架的宠物领养系统 一、项目介绍用户模块宠物模块领养模块管理员模块 二、项目技术栈三、项目运行四、项目演示用户领养界面管理员界面 总结 大家好&#xff0c;这里是程序猿代码之路&#xff01;在当今社会&#xff0c;宠物已经成为许多家庭的重要成员&#xff0c;带给…

4个免费自动生成文章的软件,轻松创作高质量文章

对于创作都而言&#xff0c;能够轻松创作出高质量的文章是每个创作者都想实现的想法&#xff0c;但如何依靠创作者自己去人工手动完成写作&#xff0c;那么将会需要付出很多时间与精力&#xff0c;并且还要有好的创作灵感&#xff0c;因此&#xff0c;通过人工手动创作高质量的…

记录些MySQL题集(1)

Innodb 是如何实现事务的&#xff1f; InnoDB是MySQL数据库的一个存储引擎&#xff0c;它支持事务处理。事务处理是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个或多个SQL语句组成&#xff0c;这些语句要么全部执行&#xff0c;要么全部不执行&#xff0c;是一个…

PyTorch复现PointNet++——模型训练+模型测试

本博文主要实现对PointNet源码进行调试&#xff0c;模型训练模型测试。 一、下载源码和数据集 论文&#xff1a;PointNet: Deep Hierarchical Feature Learning on Point Sets in a Metric Space GitHub源码&#xff1a;Pointnet2_pytorch 数据集包括三种&#xff1a;分类、零…

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块&#xff0c;简单配置&#xff0c;灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具&#xff0c;否则会报错“No crontab program”。如下图&#xff1a; python-crontab是其提供了python模块对crontab的访问&#xff0c;即可以通过p…

EasyAnimate-v3版本支持I2V及超长视频生成

阿里云人工智能平台&#xff08;PAI&#xff09;自研开源的视频生成项目EasyAnimate正式发布v3版本&#xff1a; 支持 图片&#xff08;可配合文字&#xff09; 生成视频 支持 上传两张图片作为起止画面 生成视频 最大支持720p&#xff08;960*960分辨率&#xff09; 144帧视…

【Git分支管理】分支策略 | Bug分支

目录 1.分支策略 2.特殊场景-Bug分支 2.1 master出现bug ​2.2 dev2正在开发☞stash区域 2.3 dev2正在开发master出现bug 2.3.1 fix_bug修复bug和master合并 2.3.2 dev2分支开发完和master合并 合并冲突&#xff1a;merge☞手动解决☞提交没有合并冲突&#xff1a;mer…

ns3-gym入门(三):在opengym基础上实现一个小小的demo

因为官方给的"opengym""opengym-2"这两个例子都很简单&#xff0c;所以自己改了一个demo&#xff0c;把reward-action-state相互影响的关系表现出来 一、准备工作 在ns3.35/scratch目录下创建一个文件夹&#xff1a; &#xff08;后续的运行指令后面都需要…

【深度学习】基于深度学习的模式识别基础

一 模式识别基础 “模式”指的是数据中具有某些相似特征或属性的事物或事件的集合。具体来说&#xff0c;模式可以是以下几种形式&#xff1a; 视觉模式 在图像或视频中&#xff0c;模式可以是某种形状、颜色组合或纹理。例如&#xff0c;人脸、文字字符、手写数字等都可以视…

一图了解网络通信原理

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

正则表达式怎么控制匹配的字符串更近的一个

http((?!http).)*m3u8 正则表达式怎么控制匹配的字符串更近的一个 正则如何匹配最近的字符 正则如何匹配最近的两个字符 怎么控制只要离字符串b匹配更近一点的字符串a 解释 a.b&#xff0c;它将会匹配最长的以a开始&#xff0c;以b结束的字符串 a.?b匹配最短的&#xff…

废品回收小程序:高效便捷回收,推动市场发展

随着互联网的发展和人们日益提升的环保意识&#xff0c;对废品回收市场的关注度不断提高&#xff0c;废品回收成为了当下发展前景巨大的行业之一。 传统的废品回收体系不完善&#xff0c;存在较大的不便利性&#xff0c;回收流程繁琐。为了方便大众回收&#xff0c;连接回收企…

【数据结构】树和二叉树——Lesson1

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

科普文:微服务技术栈梳理

概叙 如上两图所示&#xff0c;微服务架构下&#xff0c;需要的组件很多&#xff0c;上面中也并未列全。下面将梳理一下国内微服务架构下&#xff0c;用到的技术栈&#xff0c;仅供参考。 科普文&#xff1a;12种常见的软件架构-CSDN博客 没有最好的架构&#xff0c;只有最适…

常用网络接口自动化测试框架应用

一、RESTful&#xff08;resource representational state transfer)类型接口测试 (一&#xff09;GUI界面测试工具&#xff1a;jmeter 1、添加线程组 2、添加http请求 3、为线程组添加察看结果树 4、写入接口参数并运行 5、在查看结果树窗口查看结果 6、多组数据可增加CSVDat…