欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用JPA插入枚舉類型字段

 更新時間:2022年06月10日 09:47:13   作者:-小末  
這篇文章主要介紹了使用JPA插入枚舉類型字段,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

JPA插入枚舉類型字段

JPA插入枚舉類型字段,有三種方式:

  1. 插入枚舉字面值
  2. 插入枚舉序號
  3. 插入枚舉中自定義的值

例如,我們有個枚舉類:

public enum Gender {
? ? BOY("1" , "boy" , "Boy");
? ? GIRL("2" , "girl" , "Girl");
?
? ? private int value;
? ? private String s1;
? ? private String s2;
? ? //....省略
}

1. 插入枚舉名稱的值,即字符串

將BOY或GIRL存入表中,實體類字段如下:

public class Staff {
? ? @Enumerated(EnumType.STRING)
? ? private Gender gender;
? ? //...省略
}

2. 插入枚舉的序號,即ordinal

ordinal的意思就是你在類中定義枚舉的順序,從0開始。這種方式并不常用,不清楚同學修改了枚舉類容易導致業(yè)務異常。

而且JPA默認的方式(不加@Enumerated注解)就是這種。

例如將BOY存入表中,這種方式將存入0。將GIRL存入表中,這種方式將存入1;

public class Staff {
? ? @Enumerated(EnumType.ORDINAL)
? ? private Gender gender;
? ? //...省略
}

3.插入枚舉中的自定義值

例如:

public enum Gender {
? ? BOY("1" , "boy" , "Boy");
? ? Girl("2" , "girl" , "Girl");
?
? ? private int value;
? ? private String s1;
? ? private String s2;
? ? //....省略
}

如果想將BOY的數字1或者 “boy” 或者“Boy”存入表中,JPA默認是不支持的,需要自定義一個類實現特定接口: implements AttributeConverter<X,Y>。

以代碼為例,詳看注釋,假如我想將BOY的1存入表中:

public class GenderConverter implements AttributeConverter<Gender, Integer>{
? ? /**
? ? ?* convertToDatabaseColumn方法是轉換數據到表中
? ? ?* 這里是將Gender 枚舉的value存入表中
? ? ?*/
?? ?@Override
?? ?public Integer convertToDatabaseColumn(Gender attribute) {
?? ??? ?if(attribute == null){
?? ??? ??? ?throw new RuntimeException("Unknown Gender text : " + attribute);
?? ??? ?}
?? ??? ?return attribute.getValue();
?? ?}
?
? ? /**
? ? ?* convertToEntityAttribute方法是轉換表中的值轉換回數據
? ? ?* 這里是將表中的枚舉的value值轉換成gender枚舉
? ? ?*/
?? ?@Override
?? ?public Gender convertToEntityAttribute(Integer dbData) {
?? ??? ?for(Gender s : Gender.values()){
?? ??? ??? ?if(s.getValue() == (dbData)){
?? ??? ??? ??? ?return s;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?throw new RuntimeException("Unknown Gender text : " + dbData);
?? ?}
}

實例類:

public class Staff {
? ??
? ?/**
? ? * 利用 @Convert 指向自定義轉換類GenderConverter
? ? * 此時JPA會根據自定義轉換規(guī)則對Gender枚舉類進行存取
? ? */
? ? @Convert(converter = GenderConverter.class)
? ? private Gender gender;
? ? //...省略
}

JPA枚舉類型處理

/**
?* 枚舉類型
?*
?*/
public enum Sex {
? ? MALE,
? ? FEMALE
}
/**
* @Enumerated(EnumType.STRING) : 存放字符串數據
* @Enumerated(EnumType.ORDINAL) : 存放索引值
*/
@Enumerated(EnumType.STRING)
public Sex getSex() {
? ? return sex;
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java8新特性-Lambda表達式詳解

    Java8新特性-Lambda表達式詳解

    Java 8 (又稱為 jdk 1.8) 是 Java 語言開發(fā)的一個主要版本。Lambda 表達式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。本文通過詳細的代碼示例介紹了Java8新特性感興趣的朋友可以參考一下
    2023-04-04
  • Java網絡通信中ServerSocket的設計優(yōu)化方案

    Java網絡通信中ServerSocket的設計優(yōu)化方案

    今天小編就為大家分享一篇關于Java網絡通信中ServerSocket的設計優(yōu)化方案,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 詳解Java語言中的抽象類與繼承

    詳解Java語言中的抽象類與繼承

    這篇文章主要為大家詳細介紹了Java語言中的抽象類與繼承的相關資料,文中的示例代碼講解詳細,對我們學習Java有一定的幫助,感興趣的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • Java開發(fā)者就業(yè)需要掌握的9大專業(yè)技能

    Java開發(fā)者就業(yè)需要掌握的9大專業(yè)技能

    這篇文章主要為大家詳細介紹了java就業(yè)前需要掌握的專業(yè)技能,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java判斷一個時間是否在當前時間區(qū)間代碼示例

    Java判斷一個時間是否在當前時間區(qū)間代碼示例

    這篇文章主要給大家介紹了關于使用Java判斷一個時間是否在當前時間區(qū)間的相關資料,在日常開發(fā)中我們經常會涉及到時間的大小比較或者是判斷某個時間是否在某個時間段內,需要的朋友可以參考下
    2023-07-07
  • JDK17、JDK19、JDK1.8輕松切換(無坑版,小白也可以看懂!)

    JDK17、JDK19、JDK1.8輕松切換(無坑版,小白也可以看懂!)

    在做不同的java項目時候,因項目需要很可能來回切換jdk版本,下面這篇文章主要介紹了JDK17、JDK19、JDK1.8輕松切換的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • MyBatis中有關int和Integer的使用方式

    MyBatis中有關int和Integer的使用方式

    這篇文章主要介紹了MyBatis中有關int和Integer的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Boot應用事件監(jiān)聽示例詳解

    Spring Boot應用事件監(jiān)聽示例詳解

    這篇文章主要給大家介紹了關于Spring Boot應用事件監(jiān)聽的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • Mybatis 實現動態(tài)組裝查詢條件,仿SQL模式

    Mybatis 實現動態(tài)組裝查詢條件,仿SQL模式

    這篇文章主要介紹了Mybatis 實現動態(tài)組裝查詢條件,仿SQL模式的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 以Java代碼為例講解設計模式中的簡單工廠模式

    以Java代碼為例講解設計模式中的簡單工廠模式

    簡單來說,工廠模式就是按照需求來返回一個類型的對象,使用工廠模式的意義就是,如果對象的實例化與代碼依賴太大的話,不方便進行擴展和維護,使用工廠的目的就是使對象的實例化與主程序代碼就行解耦.來具體看一下:
    2016-05-05

最新評論