Skip to main content

创建enum文件并和数据库建立联系

enum.Userstatus.java(枚举类型)

  • @EnumValue:使mp知道value和数据库中的值建立联系
  • @JsonValue:使返回值为desc而不是NORMAL
@Getter  // she'zhget方法
public enum Userstatus {
NORMAL(1, "正常"), // 枚举初始化
FROZEN(2, "冻结"),
;
@EnumValue // 使mp知道value和数据库中的值建立联系
private final int value; // 对应数据库里的值
@JsonValue // 使返回值为desc而不是NORMAL
private final String desc; // 对上述值的描述

Userstatus(int value, String desc) {
this.value = value;
this.desc = desc;
}
}

设置application.yaml

mybatis-plus:
configuration:
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler # 配置枚举处理器

更改User.java类中的对应字段类型

/**
* 使用状态(1正常 2冻结)
*/
// private Integer status;
private Userstatus status;

同时也需更改VO中的字段!!

@Data
@ApiModel(description = "用户VO实体")
public class UserVO {
……………………
@ApiModelProperty("使用状态(1正常 2冻结)")
// private Integer status;
private Userstatus status;
……………………
}

更改Service中对应的语句

@Override
public void deductBalance(Long id, Integer money) {
……………………………………
// 2.检验用户状态
// if (user == null || user.getStatus() == 2) {
// throw new RuntimeException("用户状态异常!"); // 运行时异常
// }
if (user == null || user.getStatus() == Userstatus.FROZEN) {
throw new RuntimeException("用户状态异常!"); // 运行时异常
}
……………………………………
// 4.扣减余额 update tb_user set balance = balance - ?
int remainBalance = user.getBalance() - money;
lambdaUpdate()
.set(User::getBalance, remainBalance)
// .set(remainBalance < 0, User::getStatus, 2)
.set(remainBalance < 0, User::getStatus, Userstatus.FROZEN)
.eq(User::getId, id)
.eq(User::getBalance, user.getBalance()) // 乐观锁,防止多个用户同时在线发生冲突
.update(); // 必须加上才是执行更新语句
}
@Override
public UserVO queryUsersAndAddressById(Long id) {
// 1.查询用户
User user = getById(id);
// if (user == null || user.getStatus() == 2) {
// throw new RuntimeException("用户状态异常");
// }
if (user == null || user.getStatus() == Userstatus.FROZEN) {
throw new RuntimeException("用户状态异常");
}
…………………………………………
}