MyBatis-Plus通用枚舉自動關聯注入

一、通用枚舉

解決了繁瑣的配置,讓 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依賴 ,該插件會導致很多問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章