引入springcloud的pom配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.12</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<!--spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
注意:
1.引入springcloud相关的type都是pom类型的。
2.springboot与springcloud的版本匹配。
<properties>
<spring-cloud.version>2021.0.3</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
</properties>
商场项目的模块划分
1.用户模块
2.商品模块
3.购物车模块
4.订单模块
5.支付模块
登录功能代码学习
验证前端传入接口的参数
定义登录请求DTO对象,验证每个参数功能
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
@NotNull
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(description = "登录表单实体")
public class LoginFormDTO {
@ApiModelProperty(value = "用户名", required = true)
@NotNull(message = "用户名不能为空")
private String username;
@NotNull(message = "密码不能为空")
@ApiModelProperty(value = "用户名", required = true)
private String password;
@ApiModelProperty(value = "是否记住我", required = false)
private Boolean rememberMe = false;
}
@Validated注解来验证
@ApiOperation("用户登录接口")
@PostMapping("login")
public UserLoginVO login(@RequestBody @Validated LoginFormDTO loginFormDTO){
return userService.login(loginFormDTO);
}
lambdaQuery()方法根据某个字段查询DB
mybatisplus中 Service层实现了IService接口后就拥有此功能
// 2.根据用户名或手机号查询
User user = lambdaQuery().eq(User::getUsername, username).one();
定义一个枚举
注意@EnumValue注解
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.hmall.common.exception.BadRequestException;
import lombok.Getter;
@Getter
public enum UserStatus {
FROZEN(0, "禁止使用"),
NORMAL(1, "已激活"),
;
@EnumValue
int value;
String desc;
UserStatus(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public static UserStatus of(int value) {
if (value == 0) {
return FROZEN;
}
if (value == 1) {
return NORMAL;
}
throw new BadRequestException("账户状态错误");
}
}
对应数据库表中设计
`status` int DEFAULT '1' COMMENT '使用状态(1正常 2冻结)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
对应java程序的写法
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hmall.user.enums.UserStatus;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 使用状态(1正常 2冻结)
*/
private UserStatus status;
/**
* 创建时间
*/
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
枚举对象可以直接使用==来比较
// 3.校验是否禁用
if (user.getStatus() == UserStatus.FROZEN) {
throw new ForbiddenException("用户被冻结");
}