狡兔尚且三窟,多學一招總沒錯吧?
🚀🚀扎哇太棗糕的博客首頁🚀🚀
🌏 拋出問題
??如果讓你實現這么一個功能:將性別使用數字存儲到數據庫中,但是前端需要獲取到的是具體的性別描述(比如男女),你會怎么實現?
??相信有很多的小伙伴想到的就是,在前端或者后端使用if語句判斷從數據庫中獲取到的值,如果是0的話就返回或者輸出女,如果是1的話就返回或者輸出男。
????可以 但不優雅
??那我用switch判斷總算優雅了吧
????優雅 但不夠裝13
??不夠裝13也是錯?低調不是錯,但是我們要讓老板感覺花這些錢雇自己他值了,甚至還要讓他感覺他賺到了。
🌎 解決問題
??對于MP的通用枚舉,官方文檔如是說道:mybatis-plus的官方文檔對通用枚舉的介紹,總結來說就是簡單的三個步驟:創建枚舉類、修改配置文件、修改實體類字段屬性,接下來就以一個案例加深小伙伴們的理解
第一步: 創建枚舉類,并給相應的字段添加相應的注解,兩個注解的注釋都在代碼中給出了
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;/*** @author : mereign* @date : 2022/3/18 - 15:28* @desc : 性別的枚舉類*/@Getter
@AllArgsConstructor
public enum SexEnum {FEMALE(0, "女"),MALE(1, "男"),GROUP(2, "組合"),NONE(3, "不詳");// 將注解標識的屬性值存儲到數據庫中@EnumValueprivate Integer sex;// 將注解標識的屬性值返回給前端@JsonValueprivate String sexName;}
第二步: 配置文件
mybatis-plus:# 聲明枚舉類所在包type-enums-package: com.xiaoyu.enums
第三步: 修改實體類字段屬性,其他的屬性都照常設置
/*** 性別(0女1男2組合3不明)*/
private SexEnum sex;
前端控制器中使用的方法是MP中自帶的list方法
/*** 查詢所有歌手* @return*/
@RequestMapping(value = "/allSinger", method = RequestMethod.GET)
public Object allSinger() {// 查詢所有的歌手信息并返回return service.list();
}
測試
??怎么回事?前端并沒有輸出任何內容,難道是裝13不成?別急,讓我們使用測試類簡單分析一波
??根據測試類的返回值可以得知,從數據庫中查詢到的sex字段值既不是0|1也不是男|女而是null,這到底是怎么回事?
??經過半天的百度和試錯,最終將原因鎖定在字段類型上,原來是我們的數據庫中sex的類型是tinyint而枚舉類中使用@EnumValue修飾的字段類型是integer,由于字段類型不匹配導致返回的是一個null,這也就能夠解釋得通為什么前端不顯示sex了。??我的解決方案是將數據庫中的類型改為int,雖然說數據庫中使用tinyint可以節省數據庫的存儲空間,但是由于本人的能力有限,無法找到tinyint對應的java類型,最后無奈修改了數據庫的表結構,如果小伙伴們有妙招的話,還請評論區告訴小扎扎
如此操作前端就顯示信息了