谷粒商城学习笔记

谷粒商城

  • 一、简介
    • 01、简介-项目介绍
    • 02、简介-项目整体效果展示
    • 03、简介-分布式基础概念
    • 04、简介-项目微服务架构图
    • 05、简介-项目微服务划分图
  • 二、环境
    • 06、环境-使用vagrant快速创建linux虚拟机
    • 07、环境-虚拟机网络设置
    • 08、环境-linux安装docker
    • 09、环境-配置docker阿里云镜像加速
    • 10、环境-docker安装mysql
    • 11、环境-docker安装redis
    • 12、环境-开发工具&环境安装配置
    • 13、环境-配置git-ssh
    • 14、环境-项目结构创建&提交到码云
    • 15、环境-数据库初始化
  • 三、快速开发
    • 16、快速开发-人人开源搭建后台管理系统
    • 17、快速开发-逆向工程搭建&使用
    • 18、快速开发-配置&测试微服务基本CRUD功能
    • 19、快速开发-逆向生成所有微服务基本CRUD代码
  • 四、分布式组件
    • 20、分布式组件-SpringCloud Alibaba简介
    • 21、分布式组件-SpringCloud Alibaba-Nacos注册中心
    • 22、分布式组件-SpringCloud-OpenFeign测试远程调用
    • 23、分布式组件-SpringCloud Alibaba-Nacos配置中心-简单示例
    • 24、分布式组件-SpringCloud Alibaba-Nacos配置中心-命名空间与配置分组
    • 25、分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集
    • 26、分布式组件-SpringCloud-Gateway网关核心概念&原理
    • 27、分布式组件-SpringCloud-Gateway-创建&测试API网关
  • 五、前端基础
  • 六、商品服务
    • 45、商品服务-API-三级分类-查询-递归树形结构数据获取
    • 46、商品服务-API-三级分类-配置网关路由与路径重写
    • 47、商品服务-API-三级分类-网关统一配置跨域
    • 48、商品服务-API-三级分类-查询-树形展示三级分类数据
    • 49、商品服务-API-三级分类-删除-页面效果
    • 50、商品服务-API-三级分类-删除-逻辑删除
    • 51、商品服务-API-三级分类-删除-删除效果细化
    • 52、商品服务-API-三级分类-新增-新增效果完成
    • 53、商品服务-API-三级分类-修改-基本修改效果完成
    • 54、商品服务-API-三级分类-修改-拖拽效果
    • 55、商品服务-API-三级分类-修改-拖拽数据收集
    • 56、商品服务-API-三级分类-修改-拖拽功能完成
    • 57、商品服务-API-三级分类-修改-批量拖拽效果
    • 58、商品服务-API-三级分类-删除-批量删除&小结
    • 59、商品服务-API-品牌管理-使用逆向工程的前后端代码
    • 60、商品服务-API-品牌管理-效果优化与快速显示开关
    • 61、商品服务-API-品牌管理-云存储开通与使用
    • 62、商品服务-API-品牌管理-OSS整合测试
    • 63、商品服务-API-品牌管理-OSS获取服务端签名
    • 64、商品服务-API-品牌管理-OSS前后联调测试上传
    • 65、商品服务-API-品牌管理-表单校验&自定义校验器
    • 66、商品服务-API-品牌管理-JSR303数据校验
    • 67、商品服务-API-品牌管理-统一异常处理
    • 68、商品服务-API-品牌管理-JSR303分组校验
    • 69、商品服务-API-品牌管理-JSR303自定义校验注解
    • 70、商品服务-概念-SPU&SKU&规格参数&销售属性

一、简介

01、简介-项目介绍

  • 分三个篇章进行开发
    谷粒商城学习笔记_第1张图片
  • 属于B2C模式
    谷粒商城学习笔记_第2张图片
  • 项目技术&特点
    谷粒商城学习笔记_第3张图片
  • 项目前置要求
    谷粒商城学习笔记_第4张图片

02、简介-项目整体效果展示

  • 谷粒商城后台谷粒系统
    谷粒商城学习笔记_第5张图片
  • 前端页面

03、简介-分布式基础概念

  • 微服务
    谷粒商城学习笔记_第6张图片
  • 集群&分布式&节点
    谷粒商城学习笔记_第7张图片
  • 远程调用
    在这里插入图片描述
  • 负载均衡
    谷粒商城学习笔记_第8张图片
    在这里插入图片描述
  • 服务注册/发现&注册中心
    谷粒商城学习笔记_第9张图片
  • 配置中心
    谷粒商城学习笔记_第10张图片
  • 服务熔断&服务降级
    在这里插入图片描述
    谷粒商城学习笔记_第11张图片
  • API网关
    谷粒商城学习笔记_第12张图片

04、简介-项目微服务架构图

谷粒商城学习笔记_第13张图片

05、简介-项目微服务划分图

谷粒商城学习笔记_第14张图片

二、环境

06、环境-使用vagrant快速创建linux虚拟机

  • 在任务管理器查看是否启动CPU虚拟化谷粒商城学习笔记_第15张图片
  • 安装VirtualBox
    在官网下载Windows版本 https://www.virtualbox.org/wiki/Downloads
    谷粒商城学习笔记_第16张图片
    选择合适的安装位置无脑下一步
    如启动报错参考:https://blog.csdn.net/qq_44648936/article/details/124422279
  • 安装Aagrant
    官网下载:https://developer.hashicorp.com/vagrant/downloads
    谷粒商城学习笔记_第17张图片
    安装完点击yes重启即可。
    在cmd输入vagrant验证是否安装成功,有vagrant命令提示就代表成功。
    谷粒商城学习笔记_第18张图片
  • vagrant快速安装镜像
    输入 vagrant init centos/7 初始化
    谷粒商城学习笔记_第19张图片
    输入vagrant up 下载镜像谷粒商城学习笔记_第20张图片
    输入 vagrant ssh 连接虚拟机
    在这里插入图片描述
    whoami 查看虚拟机;exit;推出虚拟机;
    在这里插入图片描述

07、环境-虚拟机网络设置

修改用户中的虚拟机文件
谷粒商城学习笔记_第21张图片
谷粒商城学习笔记_第22张图片
重启虚拟机,查看虚拟机与主机能否互相ping通
谷粒商城学习笔记_第23张图片
谷粒商城学习笔记_第24张图片

08、环境-linux安装docker

  • docker是什么
    谷粒商城学习笔记_第25张图片
  • 安装docker
    参考官方文档:https://docs.docker.com/engine/install/centos/
    卸载docker(加sudo以管理员身份运行)
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装存储库

sudo yum install -y yum-utils

安装软件包并设置存储库

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动docker

sudo systemctl start docker

docker -v 查看docker版本
sudo docker images 查看docker镜像
sudo systemctl enable docker 设置docker开机自启动
谷粒商城学习笔记_第26张图片

09、环境-配置docker阿里云镜像加速

参考阿里云官网:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://d7x9l90i.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

谷粒商城学习笔记_第27张图片

10、环境-docker安装mysql

  • 下载mysql镜像

sudo docker pull mysql:5.7
转换成管理员用户
su -root 密码:vagrant

  • 创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

docker ps 查看正在运行中的容器
谷粒商城学习笔记_第28张图片
连接测试
谷粒商城学习笔记_第29张图片
查看并配置文件
谷粒商城学习笔记_第30张图片
谷粒商城学习笔记_第31张图片

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

11、环境-docker安装redis

  • 下载镜像文件
    docker pull redis 安装
    mkdir -p /mydata/redis/conf 创建配置文件夹
    cd /mydata/redis/conf/ 进入文件夹目录
    touch redis.conf 创建文件
    加入配置
docker run-p 6379:6379 --name redis 
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
  • 创建实例并启动
    启动redis
    谷粒商城学习笔记_第32张图片
  • 配置redis持久化
    vi redis.conf
appendonly yes

测试
谷粒商城学习笔记_第33张图片

12、环境-开发工具&环境安装配置

  • 修改配置文件
<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nuxus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/qroups/public</url>
	 </mirror>
<profile>
      <id>jdk-1.8</id>
      <activation>
		<activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>

      <repositories>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </repositories>
    </profile>
  • idea配置
    谷粒商城学习笔记_第34张图片谷粒商城学习笔记_第35张图片
    mybatisX
  • 安装VScode插件
    谷粒商城学习笔记_第36张图片

13、环境-配置git-ssh

  • 安装git
  • 注册gitee账号
  • 绑定账号密码
    谷粒商城学习笔记_第37张图片
  • 配置ssh免密登录
ssh-keygen -t rsa -C "[email protected]"

  • 查看密钥
$ cat ~/.ssh/id_rsa.pub

  • 添加密钥
    谷粒商城学习笔记_第38张图片
  • 测试是否连接成功
ssh -T [email protected]

14、环境-项目结构创建&提交到码云

  • 在gitee中新建仓库
  • 将仓库导入idea
    谷粒商城学习笔记_第39张图片
  • 创建模块gulimall-product
    谷粒商城学习笔记_第40张图片
    谷粒商城学习笔记_第41张图片
  • 创建各各微服务模块
    谷粒商城学习笔记_第42张图片
  • 主模板pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gulimall</name>
    <description>聚合服务</description>
    <packaging>pom</packaging>

    <modules>
        <module>gulimall-coupon</module>
        <module>gulimall-member</module>
        <module>gulimall-order</module>
        <module>gulimall-product</module>
        <module>gulimall-ware</module>
    </modules>

</project>

15、环境-数据库初始化

  • 镜像自动启动
sudo docker update mysql --restart=always
sudo docker update redis --restart=always
  • 创建并添加数据库
    谷粒商城学习笔记_第43张图片

三、快速开发

16、快速开发-人人开源搭建后台管理系统

  • 在人人开源中复制代码模板
git clone https://gitee.com/renrenio/renren-fast.git
git clone https://gitee.com/renrenio/renren-fast-vue.git
  • 导入sql文件,修改配置
    谷粒商城学习笔记_第44张图片
    谷粒商城学习笔记_第45张图片
    启动后端
  • vscode打开前端项目
    在终端输入npm install 下载
    npm run dev 启动

17、快速开发-逆向工程搭建&使用

  • 下载代码生成器模块
git clone https://gitee.com/renrenio/renren-generator.git
  • 在主配置添加模块名
    谷粒商城学习笔记_第46张图片
    修改配置
    谷粒商城学习笔记_第47张图片
    谷粒商城学习笔记_第48张图片
    启动模块
    全部生成导入代码
    谷粒商城学习笔记_第49张图片
    创建模块 gulimall-common
    其他模块导入公共依赖
<dependency>
	<groupId>com.atguigu.gulimall</groupId>
	<artifactId>gulimall-common</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

common的pom文件

<dependencies>
        <!--        mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.12</version>
        </dependency>


        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!--    导入mysql驱动    -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--        配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>


    </dependencies>

将renren-generator/src\main\resources\template\Controller.java.vm中的注解删掉再重新生成代码导入controller文件

18、快速开发-配置&测试微服务基本CRUD功能

/**

  • 1、整合MyBatis-Plus
  •  1)、导入依赖
    
  •  
    
  •         com.baomidou
    
  •         mybatis-plus-boot-starter
    
  •         3.2.0
    
  •  
    
  •  2)、配置
    
  •      1、配置数据源;
    
  •          1)、导入数据库的驱动。https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html
    
  •          2)、在application.yml配置数据源相关信息
    
  •      2、配置MyBatis-Plus;
    
  •          1)、使用@MapperScan
    
  •          2)、告诉MyBatis-Plus,sql映射文件位置
    
    • 2、逻辑删除
  • 1)、配置全局的逻辑删除规则(省略)
  • 2)、配置逻辑删除的组件Bean(省略)
  • 3)、给Bean加上逻辑删除注解@TableLogic
    • 3、JSR303
  • 1)、给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示
  • 2)、开启校验功能@Valid
  •  效果:校验错误以后会有默认的响应;
    
  • 3)、给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果
  • 4)、分组校验(多场景的复杂校验)
  •     1)、	@NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
    
  •      给校验注解标注什么情况需要进行校验
    
  •     2)、@Validated({AddGroup.class})
    
  •     3)、默认没有指定分组的校验注解@NotBlank,在分组校验情况@Validated({AddGroup.class})下不生效,只会在@Validated生效;
    
    • 5)、自定义校验
  •  1)、编写一个自定义的校验注解
    
  •  2)、编写一个自定义的校验器 ConstraintValidator
    
  •  3)、关联自定义的校验器和自定义的校验注解
      *      @Documented
      * @Constraint(validatedBy = { ListValueConstraintValidator.class【可以指定多个不同的校验器,适配不同类型的校验】 })
      * @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
      * @Retention(RUNTIME)
      * public @interface ListValue {
    
    • 4、统一的异常处理
  • @ControllerAdvice
  • 1)、编写异常处理类,使用@ControllerAdvice。
  • 2)、使用@ExceptionHandler标注方法可以处理的异常。
    */

19、快速开发-逆向生成所有微服务基本CRUD代码

  • 逆向生成所有微服务的代码并设置端口号
    谷粒商城学习笔记_第50张图片

四、分布式组件

20、分布式组件-SpringCloud Alibaba简介

  • 简介
    谷粒商城学习笔记_第51张图片谷粒商城学习笔记_第52张图片
    谷粒商城学习笔记_第53张图片

  • 在各模块的pom文件中加入Alibaba工程

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

21、分布式组件-SpringCloud Alibaba-Nacos注册中心

  • 下载nacos-server,启动nacos-server
  • 在总依赖中加入依赖
<!--        服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--        配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

各模块加入nacos配置

cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
application:
    name: gulimall-coupon

启动类加入服务注解 @EnableDiscoveryClient

22、分布式组件-SpringCloud-OpenFeign测试远程调用

  • 被调用的服务中
@RequestMapping("member/list")
    public R membercoupons() {
        CouponEntity entity = new CouponEntity();
        entity.setCouponName("满100减10");
        return R.ok().put("coupons",Arrays.asList(entity));
    }
  • 调用的服务中添加接口
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();
}
  • 方法测试
@Autowired
    private CouponFeignService couponFeignService;

    @RequestMapping("/coupons")
    public R test() {
        MemberEntity entity = new MemberEntity();
        entity.setNickname("张三");
        R membercoupons = couponFeignService.membercoupons();
        return R.ok().put("member",entity).put("coupons",membercoupons.get("coupons"));
    }

23、分布式组件-SpringCloud Alibaba-Nacos配置中心-简单示例

  • 加入总依赖
<!--        配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  • 创建一个bootstrap.properties配置
spring.application.name=gulimall-coupon

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  • 在配置中心添加配置
    gulimall-coupon.properties
  • 动态获取配置
    @RefreshScope
@Value("${coupon.user.name}")
    private String name;
    @Value("${coupon.user.age}")
    private Integer age;

如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。

24、分布式组件-SpringCloud Alibaba-Nacos配置中心-命名空间与配置分组

  • 命名空间可以基于环境互相隔离,也可以基于微服务之间互相隔离。
    谷粒商城学习笔记_第54张图片
spring.cloud.nacos.config.namespace=d66c447a-c224-4058-9595-e3f3f05ca019
  • 每一个微服务创建自己的命令空间,使用配置分组区分环境(dev,test,prod)
spring.cloud.nacos.config.group=dev

25、分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集

谷粒商城学习笔记_第55张图片

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
# 自动刷新
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=ohter.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

26、分布式组件-SpringCloud-Gateway网关核心概念&原理

27、分布式组件-SpringCloud-Gateway-创建&测试API网关

  • 创建模块 gulimall-gateway
  • 配置文件
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
  • 测试
spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu

        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

五、前端基础

六、商品服务

45、商品服务-API-三级分类-查询-递归树形结构数据获取

/**
     * 查出所有分类以及子分类,以树形结构组装起来
     */
    @RequestMapping("/list/tree")
    public R list(){
        List<CategoryEntity> entities = categoryService.listWithTree();

        return R.ok().put("data", entities);
    }
@Override
    public List<CategoryEntity> listWithTree() {
        //1、查出所有分类
        List<CategoryEntity> entities = baseMapper.selectList(null);
        //2、组装成父子的树形结构
        //2.1、找到所有的一级分类
        List<CategoryEntity> level1Menus = entities.stream().filter(
                categoryEntity -> categoryEntity.getParentCid() == 0
        ).map((menu) -> {
            menu.setChildren(getChildrens(menu,entities));
            return menu;
        }).sorted((menu1, menu2) -> {
            return (menu1.getSort()==null?0:menu1.getSort()) - (menu2.getSort()==null?0:menu2.getSort());
        }).collect(Collectors.toList());

        return level1Menus;
    }

    //递归查找所有菜单的子菜单
    public List<CategoryEntity> getChildrens(CategoryEntity root,List<CategoryEntity> all) {
        List<CategoryEntity> childrens = all.stream().filter(categoryEntity -> {
            return categoryEntity.getParentCid() == root.getCatId();
        }).map(categoryEntity -> {
            //1、找到子菜单
            categoryEntity.setChildren(getChildrens(categoryEntity, all));
            return categoryEntity;
        }).sorted((menu1, menu2) -> {
            //2、菜单的排序
            return (menu1.getSort()==null?0:menu1.getSort()) - (menu2.getSort()==null?0:menu2.getSort());
        }).collect(Collectors.toList());

        return childrens;
    }

46、商品服务-API-三级分类-配置网关路由与路径重写

renren-fast配置注册中心

  application:
    name: renren-fast
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

加入renren-fast的网关

        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?.*),/renren-fast/$\{segment}

47、商品服务-API-三级分类-网关统一配置跨域

@Configuration
public class GulimallCorsConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        CorsConfiguration corsConfiguration = new CorsConfiguration();

        //1、配置跨域
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);

        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}

48、商品服务-API-三级分类-查询-树形展示三级分类数据

  • geteway配置
- id: product_route
          uri: lb://gulimall-product
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/(?.*),/$\{segment}

        - id: third_party_route
          uri: lb://gulimall-third-party
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/thirdparty/(?.*),/$\{segment}

  • bootstrap.properties
spring.application.name=gulimall-product

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=1f423aa8-ad84-466e-8c13-595433fa5776
  • application.yml
  cloud:
    nacos:
     discovery:
       server-addr: 127.0.0.1:8848
  application:
    name: gulimall-product
  • 启动类加上注册服务中心 @EnableDiscoveryClient

49、商品服务-API-三级分类-删除-页面效果

50、商品服务-API-三级分类-删除-逻辑删除

  • 配置逻辑删除
mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0

@TableLogic(value = "1",delval = "0")
	private Integer showStatus;
  • 删除方法
@RequestMapping("/delete")
    public R delete(@RequestBody Long[] catIds){
		categoryService.removeByIds(Arrays.asList(catIds));
		categoryService.removeMenuByIds(Arrays.asList(catIds));

        return R.ok();
    }

    @Override
    public void removeMenuByIds(List<Long> asList) {
        //TODO
        baseMapper.deleteBatchIds(asList);
    }
  • 配置日志
logging:
  level:
    com.atguigu.gulimall: debug

51、商品服务-API-三级分类-删除-删除效果细化

52、商品服务-API-三级分类-新增-新增效果完成

53、商品服务-API-三级分类-修改-基本修改效果完成

54、商品服务-API-三级分类-修改-拖拽效果

55、商品服务-API-三级分类-修改-拖拽数据收集

56、商品服务-API-三级分类-修改-拖拽功能完成

  • 批量修改方法
//批量修改
    @RequestMapping("/update/sort")
    public R updateSort(@RequestBody CategoryEntity[] categoryEntities) {
        categoryService.updateBatchById(Arrays.asList(categoryEntities));
        return R.ok();
    }

57、商品服务-API-三级分类-修改-批量拖拽效果

58、商品服务-API-三级分类-删除-批量删除&小结

59、商品服务-API-品牌管理-使用逆向工程的前后端代码

60、商品服务-API-品牌管理-效果优化与快速显示开关

61、商品服务-API-品牌管理-云存储开通与使用

谷粒商城学习笔记_第56张图片
谷粒商城学习笔记_第57张图片
地域使用离自己最近的,存储类型测试使用低频访问,读写权限为公共读

62、商品服务-API-品牌管理-OSS整合测试

谷粒商城学习笔记_第58张图片
在这里插入图片描述
谷粒商城学习笔记_第59张图片

<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
 // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-guangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tMRnEmfMkyWUGrCWkLh";
        String accessKeySecret = "wYLpS6arTcmaNEJkQfvFrPR1XstafP";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "gulimall-hhxy";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        //上传文件流
        FileInputStream inputStream = new FileInputStream("F:\\XiaoJie\\Desktop\\QQ截图20230223164014.png");

        ossClient.putObject("gulimall-hhxy","QQ截图20230223164014.png",inputStream);

        //关闭ossClinet
        ossClient.shutdown();

        System.out.println("上传成功!!!");

谷粒商城学习笔记_第60张图片
谷粒商城学习笔记_第61张图片
谷粒商城学习笔记_第62张图片

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_pms
    driver-class-name: com.mysql.jdbc.Driver
  cloud:
    nacos:
     discovery:
       server-addr: 127.0.0.1:8848
       access-key: LTAI5tMRnEmfMkyWUGrCWkLh
       secret-key: wYLpS6arTcmaNEJkQfvFrPR1XstafP
       endpoint: oss-cn-guangzhou.aliyuncs.com

63、商品服务-API-品牌管理-OSS获取服务端签名

64、商品服务-API-品牌管理-OSS前后联调测试上传

65、商品服务-API-品牌管理-表单校验&自定义校验器

66、商品服务-API-品牌管理-JSR303数据校验

67、商品服务-API-品牌管理-统一异常处理

68、商品服务-API-品牌管理-JSR303分组校验

69、商品服务-API-品牌管理-JSR303自定义校验注解

70、商品服务-概念-SPU&SKU&规格参数&销售属性

你可能感兴趣的:(学习,微服务,分布式,java)