詳解mybatis-plus使用@EnumValue注解的方式對(duì)枚舉類型的處理
前言:
在開發(fā)中,我們經(jīng)常會(huì)用到諸如:性別(男/女)、審核狀態(tài)(未審核/審核中/已審核)之類的數(shù)據(jù),通常會(huì)在數(shù)據(jù)庫(kù)中使用一個(gè)數(shù)字類型的字段來(lái)標(biāo)識(shí),比如:性別,用1來(lái)表示男,2來(lái)表示女,而在代碼中一般會(huì)定義成enum類型或靜態(tài)常量來(lái)避免在業(yè)務(wù)代碼中出現(xiàn)“0/1”這種魔法值,但是在數(shù)據(jù)庫(kù)存儲(chǔ)及前后端交互的時(shí)候,就需要進(jìn)行轉(zhuǎn)化;無(wú)論是在SQL、前端還是后臺(tái)轉(zhuǎn)化,都需要寫相應(yīng)的代碼,無(wú)形中增加了開發(fā)工作量;mybatis-plus實(shí)現(xiàn)了對(duì)該問(wèn)題的處理,能夠讓我們?cè)诓樵償?shù)據(jù)庫(kù)時(shí),直接能夠返回字段標(biāo)識(shí)的意思。配置如下:
第一步:
創(chuàng)建枚舉類,在需要存儲(chǔ)數(shù)據(jù)庫(kù)的屬性上添加@EnumValue注解,在需要前端展示的屬性上添加@JsonValue注解;
package com.demo.mybatisplus.constant; import com.baomidou.mybatisplus.annotation.EnumValue; import com.fasterxml.jackson.annotation.JsonValue; public enum SexEnum { MAN(1, "男"), WOMAN(2, "女"); @EnumValue private Integer key; @JsonValue private String display; SexEnum(Integer key, String display) { this.key = key; this.display = display; } public Integer getKey() { return key; } public String getDisplay() { return display; } }
第二步:
application.properties文件里添加配置,定義掃描枚舉類的包路徑;
#配置枚舉 支持通配符 * 或者 ; 分割 mybatis-plus.type-enums-package=com.demo.mybatisplus.constant #mybatis-plus.configuration.default-enum-type-handler=org.apache.ibatis.type.EnumOrdinalTypeHandler
第三步:
pojo中的sex屬性設(shè)置為枚舉SexEnum;
@ApiModelProperty(value = "性別") @TableField("sex") private SexEnum sex;
測(cè)試:
@Test public void insert() { UserInfo userInfo = new UserInfo(); userInfo.setAge(22); userInfo.setName("李四"); userInfo.setSex(SexEnum.WOMAN); userInfoMapper.insert(userInfo); System.out.println(userInfo); }
數(shù)據(jù)庫(kù)保存的值:
ID | NAME | AGE | SEX |
---|---|---|---|
1 | 張三 | 11 | 1 |
2 | 李四 | 22 | 2 |
3 | 王五 | 33 | 1 |
前端顯示的值:
[ {"id":"1","name":"張三","age":11,"sex":"男"}, {"id":"2","name":"李四","age":22,"sex":"女"}, {"id":"3","name":"王五","age":33,"sex":"男"} ]
注意事項(xiàng):
@EnumValue標(biāo)記的枚舉類屬性的類型要和數(shù)據(jù)庫(kù)字段的類型對(duì)應(yīng),否則在查詢數(shù)據(jù)的時(shí)候無(wú)法轉(zhuǎn)化為枚舉類型,并顯示為null;
如果查詢的時(shí)候,數(shù)據(jù)庫(kù)字段的值匹配不到枚舉,程序運(yùn)行時(shí)并不會(huì)報(bào)錯(cuò),而是顯示為null;
在保存的時(shí)候,前端需要傳遞@JsonValue標(biāo)記的枚舉類屬性的值,即"男/女";因?yàn)镋num的屬性ordinal(int),在測(cè)試過(guò)程中,傳枚舉值在枚舉類中的定義順序(或者稱為索引,順序從0開始),也可以轉(zhuǎn)換為相應(yīng)的枚舉值,比如:上面定義的SexEnum枚舉,前端傳0或者"0",會(huì)轉(zhuǎn)換成MAN,傳1或者"1"會(huì)轉(zhuǎn)換成WOMAN;傳其他值會(huì)報(bào)異常:
com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.demo.mybatisplus.constant.SexEnum from String "3": not one of the values accepted for Enum class: [女, 男]或com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of typecom.demo.mybatisplus.constant.SexEnum from number 3: index value outside legal index range [0..2];
到此這篇關(guān)于詳解mybatis-plus使用@EnumValue注解的方式對(duì)枚舉類型的處理的文章就介紹到這了,更多相關(guān)mybatis-plus EnumValue枚舉內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
容器環(huán)境的JVM內(nèi)存設(shè)置實(shí)踐記錄
Docker和K8S的興起,很多服務(wù)已經(jīng)運(yùn)行在容器環(huán)境,對(duì)于java程序,JVM設(shè)置是一個(gè)重要的環(huán)節(jié),這里總結(jié)下我們項(xiàng)目里的最佳實(shí)踐,對(duì)容器環(huán)境的JVM內(nèi)存相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03Java連接 JDBC基礎(chǔ)知識(shí)(操作數(shù)據(jù)庫(kù):增刪改查)
這篇文章主要介紹了Java連接 JDBC基礎(chǔ)知識(shí),包括操作數(shù)據(jù)庫(kù)之增刪改查操作,需要的朋友可以參考下2021-04-04java 注解annotation的使用以及反射如何獲取注解
這篇文章主要介紹了java 注解annotation的使用以及反射如何獲取注解的相關(guān)資料,需要的朋友可以參考下2017-01-01Java如何通過(guò)線程解決生產(chǎn)者/消費(fèi)者問(wèn)題
這篇文章主要介紹了Java如何通過(guò)線程解決生產(chǎn)者/消費(fèi)者問(wèn)題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-10-10Spring Boot集成MinIO對(duì)象存儲(chǔ)服務(wù)器操作步驟
通過(guò)Spring Boot集成MinIO,你可以在應(yīng)用中方便地進(jìn)行文件的存儲(chǔ)和管理,本文給大家分享Spring Boot集成MinIO對(duì)象存儲(chǔ)服務(wù)器詳細(xì)操作步驟,感興趣的朋友一起看看吧2024-01-01Java控制結(jié)構(gòu)知識(shí)點(diǎn)詳解
在本篇文章里小編給大家分享的是關(guān)于Java控制結(jié)構(gòu)知識(shí)點(diǎn)詳解,有需要的朋友們可以參考下。2019-10-10