一、通用枚舉
解決了繁瑣的配置,讓 mybatis 優雅的使用枚舉屬性!
一般搜索用戶信息列表,列如用戶有禁用和啓用兩個狀態
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private BigInteger id;
private String name;
private String email;
private Integer status;
}
@GetMapping("/findById")
public User findById(){
User user = userMapper.selectById(1);
return user;
}
查詢結果:
如果前端接收到json數據後,需要的status字段屬性值,不是1或者2,需要的是禁止或者啓用的中文字,如何解決呢?
二、聲明通用枚舉屬性
public enum StatusEnum implements IEnum<Integer> {
DISABLE(1,"禁用"),
ENABLE(2,"啓用");
private final Integer status; //數據庫存儲字段
private final String desc; //返回的顯示描述
StatusEnum(Integer status,String desc){
this.status = status;
this.desc = desc;
}
@Override
public Integer getValue() {
return this.status;
}
@JsonValue
public String getDesc(){
return this.desc;
}
}
實體屬性使用枚舉類型
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private BigInteger id;
private String name;
private String email;
private StatusEnum status;
}
三、配置掃描通用枚舉
#mybatis-plus
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:com/example/plus/mapper/xml/*.xml
typeEnumsPackage: com.example.plus.enums
加入該配置:
typeEnumsPackage: com.example.plus.enums
測試:
四、注意、注意、注意
1、記得加上@JsonValue註解,序列化時只返回這一個字段的值。
2、配置掃描通用枚舉可能3.0版本以前版本配置不一樣,本列使用的是3.0以上版本
3、通用枚舉無法正確取值,可能會報這樣的錯誤
Caused by: java.lang.IllegalArgumentException: No enum constant
解決方式:
去除 pom.xml中:spring-boot-devtools依賴 ,該插件會導致很多問題