谷粒商城学习笔记,第四天:商品服务
1、TableField
@TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错
2、gataway网关配置
server:
port: 88
spring:
application:
name: gulimall-gateway
cloud:
gateway:
routes:
##商品路由
- id: product_route
uri: lb://gulimall-product
predicates:
- Path=/api/product/**
filters:
- RewritePath=/api/(?<segment>.*),/product/$\{segment}
##后台管理系统路由
- id: admin_route
##转发请求URL:loadbalenca://服务名
uri: lb://renren-fast
##断言拦截的URL
predicates:
- Path=/api/**
##重写URL:真实请求=uri+重写后的url
filters:
- RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
nacos:
server-addr: 127.0.0.1:8848
3、跨域
浏览器对JavaScript施加的安全限制
同源策略:只要协议+域名+端口 都要相同,其中有任何一个不同都会产生跨域
非简单请求,都会发送一个预检请求(OPTIONS)
①、预检请求,OPTIONS
②、响应允许跨域
③、发送真实请求
④、响应数据
解决方案: ①、浏览器请求nginx,Nginx再转发请求 ②、后端虚拟返回OPTIONS的响应头,配置当次请求允许跨域
在gateway项目中新增跨域配置:
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.setAllowCredentials(true);
corsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(corsConfigurationSource);
}
}
4、配置文件读取顺序
1、config/application.properties(项目根目录中config目录下)
2、config/application.yml
3、application.properties(项目根目录下)
4、application.yml
5、resources/config/application.properties(项目resources目录中config目录下)
6、resources/config/application.yml
7、resources/application.properties(项目的resources目录下)
8、resources/application.yml
5、逻辑删除:mybatis-plus
1>、mybatis-plus的逻辑删除功能,需要在数据表里 有一个字段表示是否删除
2>、application.yml新增
##mybatis-plus相关配置
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
3>、对应实体字段增加注解
//value表示未删除 delval表示删除
@TableLogic(value = "1",delval = "0")
4>、使用
//物理删除商品分类
baseMapper.deleteBatchIds(asList);
6、OSS文件服务
1>、第一种方式:通过应用服务器上传
导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>
编写配置
alibaba:
cloud:
access-key: your-ak
secret-key: your-sk
oss:
endpoint: xxxx
代码编写
@Service
public class YourService {
@Autowired
private OSSClient ossClient;
public void saveFile() {
ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("pathOfYourLocalFile"));
}
}
2>、前端从服务端获取签名后直接上传OSS
//TODO
7、统一异常处理
@ControllerAdvice + @ExceptionHandler
@ControllerAdvice
public class GlobalException {
//空指针异常
@ExceptionHandler(value = {NullPointerException.class})
public ModelAndView nullException(Exception e){
ModelAndView mav = new ModelAndView("error1");
mav.addObject("error",e.toString());
return mav;
}
//算术异常
@ExceptionHandler(value = {ArithmeticException.class})
public ModelAndView arithmeticException(Exception e){
ModelAndView mav = new ModelAndView("error2");
mav.addObject("error",e.toString());
return mav;
}
}
8、JSR 300
9、商品
SPU SKU
商品规格:商品规格 对应SPU 如:长宽高 重量 屏幕大小 CPU品牌型号 GPU型号====>基本属性
销售属性:销售属性 对应SKU 如:颜色 内存大小 =======>销售属性
商品介绍:商品介绍 对应SPU
分类(category)===>属性分组(attr_group)
分类(category)====>属性(attr):为了搜索
属性分组attr_group====》属性attr
属性attr===》属性类型attr_type(基本属性、销售属性)
商品SPU====》分类(category)|| 品牌(brand)
品牌(brand)=====>分类(category) [一个品牌对应多个分类]
商品SPU====》属性attr(基本属性)
商品SPU====>商品SKU======>属性attr(销售属性)