springMvc和mybatis-plus中枚舉值和字段的映射
DB和entity之間的映射
最近看到有人使用這幾個(gè)注解,就稍微了解了一下各自的用法,發(fā)現(xiàn)枚舉在前后臺(tái)傳值,DB和entity之間的映射很方便
- 1.使用@JsonCreator,可以將前臺(tái)的屬性值直接轉(zhuǎn)換為枚舉類型
- 2.@EnumValue 將枚舉中的指定的值直接存儲(chǔ)到數(shù)據(jù)庫,不需要再手動(dòng)轉(zhuǎn)換
- 3.@JsonValue 后臺(tái)返回前臺(tái)數(shù)據(jù)時(shí)也不需要轉(zhuǎn)換,可以直接返回指定的值
案例:
User實(shí)體
@TableName("user")
@Data
public class User {
private Integer id;
private String name;
private Integer age;
private SexEnum sex;
}枚舉類
public enum SexEnum {
MALE(1,"男"),
FEMALE(2,"女")
;
@EnumValue //數(shù)據(jù)庫中直接存入枚舉屬性val的值
private Integer val;
@JsonValue //序列化枚舉對象時(shí),返回其屬性desc的值
private String desc;
SexEnum(Integer val, String desc) {
this.val = val;
this.desc = desc;
}
/**
* 1.通過屬性desc獲取對應(yīng)的枚舉
* 2.JsonCreator加在構(gòu)造方法或者靜態(tài)方法上,為對象的反序列化指定構(gòu)造邏輯
* 3.前端向后臺(tái)傳輸json參數(shù),json反序列化成對象時(shí)會(huì)自動(dòng)調(diào)用這個(gè)方法
*/
@JsonCreator
public static SexEnum fromDesc(String desc) {
System.out.println("進(jìn)入枚舉自定義構(gòu)造方法");
for(SexEnum sexEnum : SexEnum.values()) {
if(sexEnum.getDesc().equals(desc)) {
return sexEnum;
}
}
return null;
}
public Integer getVal() {
return val;
}
public void setVal(Integer val) {
this.val = val;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}請求類
@RequestMapping("/getUser")
@ResponseBody
public User getUser(User u) {
//返回?cái)?shù)據(jù)給前臺(tái)時(shí),序列化對象時(shí),其中的枚舉類型會(huì)根據(jù)@JsonValue指定的字段進(jìn)行處理
User user = userService.getUser();
return user;
}
@RequestMapping("/save_user")
@ResponseBody
public String saveUser(@RequestBody User u) {
//前臺(tái)傳入Sex字符串,直接轉(zhuǎn)換為枚舉對象
// json反序列化時(shí)自動(dòng)調(diào)用了SexEnum中的fromDesc()獲取枚舉對象,然后賦值給u中的sex
userService.saveUser(u);
return "success";
}效果圖
postman中的入?yún)?一定要使用json格式,使用表單無效果

看到控制臺(tái)打印了一句話,說明反序列化枚舉對象時(shí),使用了我們自定義的方法

可以看到sex屬性中的值前端傳入的值‘男’,但是后臺(tái)接收到為SexEnum的"MALE"

數(shù)據(jù)庫中的數(shù)據(jù),按照@EnumValue指定的屬性存入數(shù)據(jù)

從數(shù)據(jù)庫中查詢的數(shù)據(jù),枚舉按照我們使用@jsonValue的字段返回值

以上就是springMvc和mybatis-plus中枚舉值和字段的映射的詳細(xì)內(nèi)容,更多關(guān)于springMvc mybatis-plus的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java使用ES?Client?調(diào)用滾動(dòng)查詢及Elasticsearch滾動(dòng)查詢Scrolling機(jī)制
Elasticsearch提供了一種稱為"滾動(dòng)查詢"(Scrolling)的機(jī)制,用于處理大型數(shù)據(jù)集的分頁查詢,這篇文章給大家介紹滾動(dòng)查詢的一般步驟及Java使用ESClient調(diào)用滾動(dòng)查詢的方法,感興趣的朋友一起看看吧2023-08-08
Mybatis中多個(gè)對象包含同一個(gè)對象的處理操作
這篇文章主要介紹了Mybatis中多個(gè)對象包含同一個(gè)對象的處理操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
struts2攔截器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
如何使用struts2攔截器,或者自定義攔截器。下面通過實(shí)例代碼給大家分享struts2攔截器的相關(guān)知識(shí),感興趣的朋友參考下吧2017-09-09
SpringBoot配置mybatis駝峰命名規(guī)則自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot配置mybatis駝峰命名規(guī)則自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
使用shardingsphere對SQLServer坑的解決
本文主要介紹了使用shardingsphere對SQLServer坑的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
Java實(shí)現(xiàn)WGS84/GCJ02/BD09的坐標(biāo)互轉(zhuǎn)終極方案
這篇文章主要為大家詳細(xì)介紹了Java如何利用Geotools實(shí)現(xiàn)WGS84/GCJ02/BD09的坐標(biāo)互轉(zhuǎn),文中的示例代碼講解詳細(xì),需要的小伙伴可以了解下2025-09-09

