JPA+Enum枚舉實現(xiàn)步驟流程
更新時間:2025年10月16日 14:27:57 作者:匍匐前進の程序猿
本文介紹了如何在Java中創(chuàng)建學生實體類及Sex枚舉類,并通過@JsonValue注解實現(xiàn)枚舉序列化,使用JPA的@Converter及AttributeConverter完成枚舉與數(shù)據(jù)庫字段的轉換,最后通過controller層進行新增與查詢測試
1.創(chuàng)建實體類(學生實體,Sex枚舉類)
@Data
@Table
@Entity
public class Student {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid",strategy = "org.hibernate.id.UUIDGenerator")
private String id;
private String name; // 姓名
private Sex sex; // 性別
}
使用@JsonValue來標記枚舉想要返回的序列化值
注意:建議枚舉的編碼不要使用數(shù)字
public enum Sex { // 性別
GIRL("FM","女"),BOY("M","男");
private String code;
private String sName;
Sex(String code,String sName) {
this.code = code;
this.sName = sName;
}
public String getCode() {
return code;
}
/**
* 將數(shù)據(jù)庫查詢到編碼自動轉為文字返回給前端
*/
@JsonValue
public String getsName() {
return sName;
}
}
2.創(chuàng)建Converter(屬性轉換器)
@Converter注解的作用是告訴JPA這是一個屬性轉換器autoApply =true的作用是表示這是一個全局的屬性轉換器,也就是說這個轉換器對所有的實體類都起作用AttributeConverter<需要被轉換的enum,與數(shù)據(jù)庫表字段對應的java類型>
@Converter(autoApply = true)
public class SexConverter implements AttributeConverter<Sex, String> {
/**
* 此方法告訴jpa,數(shù)據(jù)庫里存的值,即插入和更新操作時執(zhí)行;
*/
@Override
public String convertToDatabaseColumn(Sex sex) {
if(sex == null){
return null;
}
return sex.getCode(); // 此處存儲的是編碼
}
/**
* 此方法告訴Java從數(shù)據(jù)庫里取出的值對應的是哪個enum值,即查詢操作時執(zhí)行。
*/
@Override
public Sex convertToEntityAttribute(String code) {
if(code == null){
return null;
}
for (Sex sex : Sex.values()) {
if(sex.getCode().equals(code)){
return sex; // 獲取到當前Sex信息
}
}
throw new IllegalArgumentException(); // 或者給個默認的enum eg: return Category.UNKNOWN
}
}
3.創(chuàng)建controller層
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired private StudentRepo repo;
@PostMapping(path = "/save")
public Student save(@RequestBody Student student) {
repo.save(student);
return student;
}
@GetMapping(path = "/list")
public List<Student> list() {
return repo.findAll();
}
}
當需要在后端使用時,用此方法–>Sex.GIRL/Sex.BOY
4.數(shù)據(jù)庫表,測試

新增測試

查詢測試

總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
處理Log4j2不能打印行號的問題(AsyncLogger)
這篇文章主要介紹了處理Log4j2不能打印行號的問題(AsyncLogger),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
java實現(xiàn)解析json復雜數(shù)據(jù)的第三種思路詳解
這篇文章主要為大家信息介紹了java實現(xiàn)解析json復雜數(shù)據(jù)的第三種思路,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-01-01
Java并發(fā)編程之CountDownLatch源碼解析
這篇文章主要介紹了Java并發(fā)編程之CountDownLatch源碼解析,文中有非常詳細的代碼示例,對正在學習java并發(fā)編程的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
SpringBoot?Redis清除所有的key的實現(xiàn)方法
本文主要介紹了SpringBoot?Redis清除所有的key的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05

