MybatisPlus中实体类属性对应枚举类实现

2021-03-23 01:43:23  晓掌柜  版权声明:本文为站长原创文章,转载请写明出处


一、前言


    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类中要修改属性的类型为你所需要的对应的枚举。


    更多精彩,请持续关注:guangmuhua.com


最新评论: