尚品汇-(十六)

目录

商品详情功能开发

(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,一经查实,立即删除!

相关文章

「UCD」浅谈蓝湖Figma交互设计对齐

在现代数字产品的设计和开发过程中,选择合适的工具对于提高团队效率和保证产品质量至关重要。本文将从开发和设计两个不同的角度,探讨蓝湖和Figma两款流行工具的优势与不足,并提出结论和建议。 开发研发视角:蓝湖 优点: 清晰的设计规范:蓝湖为开发工程师提供了清晰的设计…

Gradio:快速构建机器学习Web应用的神奇工具

文章目录 引言官网链接原理基础使用安装 Gradio创建一个简单的 Gradio 应用 高级使用自定义界面集成到现有Web应用中 优缺点优点缺点 总结 引言 Gradio 是一个基于 Python 的库&#xff0c;它极大地简化了将机器学习模型转化为交互式Web应用的过程。无需深入了解Web开发或后端…

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

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

【阶乘】个人练习-Leetcode-LCP 22. 黑白方格画

题目链接&#xff1a;https://leetcode.cn/problems/ccw6C7/description/ 题目大意&#xff1a;给出一块白方格面积为n*n&#xff0c;给出一个数字k&#xff0c;每一次操作可以把方格的某一整行或者某一整列涂黑&#xff0c;求使得黑色格子数字为k的【最终图案】的个数。 思路…

MySQL 分库分表

分表 分表 将表按照某种规则拆分成多个表。 分表的使用原因 当数据量超大的时候&#xff0c;B-Tree索引效果很变差。 垂直分区 切分原则&#xff1a;把不常用或存储内容比较多的字段分到新的表中可使表存储更多数据。 原因&#xff0c;Innodb主索引叶子节点存储着当前行的所有信…

Linux抽象套接字

在UNIX和类UNIX系统中,socket编程提供了一种机制,允许进程之间进行通信。其中,UNIX域套接字(UNIX domain socket)是一种特殊的套接字,用于同一台机器上的进程间通信(IPC)。UNIX域套接字可以使用两种类型的地址:路径名套接字(pathname socket)和抽象套接字(abstract…

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

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

网络监控工具推荐与对比

网络监控工具在确保网络安全、性能和可用性方面发挥着关键作用。以下是几款流行的网络监控工具的推荐与对比&#xff1a; 1. Nagios 特点&#xff1a; 开放源代码&#xff1a;提供免费的社区版本和付费的企业版本。可扩展性&#xff1a;拥有大量插件&#xff0c;可以监控各种…

芯课堂 | 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;其中一个是激活…

【闲聊】-Perl的基础语法

Perl语言详细介绍 概述 Perl&#xff0c;全称“Practical Extraction and Report Language”&#xff0c;是一种功能强大的编程语言&#xff0c;特别擅长文本处理和系统自动化任务。它最初由Larry Wall于1987年设计&#xff0c;旨在解决UNIX系统管理中的常见问题&#xff0c;…

拆分整数 java

拆分整数 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10输出: 36解释: 10 3 …

关于不同集合类型是否重写equals和hashCode的问题

不同集合类型在没有重写 equals 和 hashCode 时的行为&#xff1a; HashSet 和 HashMap: 这些集合依赖于对象的 hashCode 方法来定位元素&#xff0c;然后使用 equals 方法来确认元素是否真的相等。 如果你没有重写 equals 和 hashCode&#xff0c;那么默认的 equals 方法将基…

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

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

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

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

如何解决手机游戏因IP代理被封禁无法正常游戏的问题?

在当前的网络环境下&#xff0c;许多手机游戏为了维护游戏的公平性和安全性&#xff0c;会采取措施对使用IP代理的玩家进行封禁&#xff0c;导致他们无法正常访问游戏。这种情况对于一些需要使用IP代理的用户来说可能显得很棘手&#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;分类、零…

SpringBoot @Value注解优化

前言&背景 SpringBoot的Value功能之一可以从配置文件读取并赋值到对象的属性。 需求方要求原来从配置文件中修改的配置参数需要提供界面修改&#xff0c;但是接受配置完后重启服务。 分析&方案 我们主要使用了Value注解&#xff0c;所以在做的时候需要从Value注解下…