一、前言
1.1、關于枚舉類
① 枚舉是JDK1.5中的新功能,我們可以使用枚舉很好的去描述一些業務場景:一年有四季、人類有男女...
② 同樣我們在業務層面會有很多,比如狀態屬性、分類屬性等等,我們可以把他們放在數據庫里面以達到動態讀取的效果。
1.2、我的枚舉使用場景
在我的程序中有很多是、否屬性的字段。為了較好地解決這個業務場景我使用枚舉進行了屬性值得記錄,同時枚舉和MyBatisPlus結合,使得開發效率也有小小的提升。
二、整合過程
2.1、配置掃描包
因為是與MybatisPlus整合,所以要在yml文件中配置枚舉類的掃描包
# mybatisPlus
mybatis-plus:
mApper-locations: classpath*:/mapper/**/*.xml
# 枚舉類掃描
typeEnumsPackage: com.XXX.commons.enums
global-config:
#數據庫相關配置
db-config:
#主鍵類型 AUTO:"數據庫ID自增", INPUT:"用戶輸入ID", ID_WORKER:"全局唯一ID (數字類型唯一ID)", UUID:"全局唯一ID UUID";
id-type: AUTO
#字段策略 IGNORED:"忽略判斷",NOT_NULL:"非 NULL 判斷"),NOT_EMPTY:"非空判斷"
field-strategy: NOT_NULL
#駝峰下劃線轉換
column-underline: true
logic-delete-value: 1
logic-not-delete-value: 0
banner: false
#原生配置
configuration:
log-impl: org.Apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
default-enum-type-handler: org.apache.ibatis.type.EnumOrdinalTypeHandler
2.2、創建枚舉類(以是否XXX屬性為例)
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
/**
* @author XA
* date 2021/3/19 16:04
* description: “是否”枚舉類
*/
public enum TureOrFalseEnum {
STATE_1(0, "否"),
STATE_2(1, "是"),;
TureOrFalseEnum(Integer key, String value) {
this.value = value;
this.key = key;
}
@EnumValue
private Integer key;
@JsonValue
private String value;
public Integer getKey() {
return key;
}
public String getValue() {
return value;
}
public static String getValueBykey(Integer key){
TureOrFalseEnum[] applicationStateEnums = values();
for (TureOrFalseEnum itemEnum : applicationStateEnums) {
if (itemEnum.key.equals(key)) {
return itemEnum.getValue();
}
}
return null;
}
public static Integer getKeyByValue(String value){
for (TureOrFalseEnum itemEnum : TureOrFalseEnum.values()) {
if(value.equals(itemEnum.getValue())){
return itemEnum.getKey();
}
}
return null;
}
}
2.3、實體類中設置類型為對應的枚舉
import com.bh.openapi.commons.enums.TureOrFalseEnum;
import lombok.Data;
@Data
public class TestDTO {
/**
* 是否刪除
*/
private TureOrFalseEnum deleted;
}
2.4、達到效果
① 我們在寫入數據時字段屬性為1
② 我們在進行數據查詢時,deleted屬性返回的是中文描述:是
三、注意事項
3.1、配置枚舉掃描
如果你不配置枚舉掃描包,會導致在進行數據查詢后無法做對應的數據類型轉換。
3.2、枚舉類的屬性值注解
枚舉類中的key使用 @EnumValue
枚舉類中的屬性描述使用 @JsonValue
3.3、模型層屬性類型
POJO類中要修改屬性的類型為你所需要的對應的枚舉。