亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Springboot JPA 枚舉Enum類型存入到數據庫的操作

瀏覽:2日期:2023-03-26 15:33:32

1、使用JPA 的@Enumerated 注解 ,可以直接將Enum映射到數據庫中。

但是value的值只有兩種方式選擇,一種是使用枚舉的序號映射,一種是枚舉的名稱來映射。

public enum EnumType { /** Persist enumerated type property or field as an integer. */ ORDINAL, /** Persist enumerated type property or field as a string. */ STRING}

如果想存入枚舉中的自定義的值,則需要實現AttributeConverter接口

2、實現AttributeConverter接口方式

/** * @param <DB> : 保存到數據庫的數據類型 * @author peter * date: 2019-05-15 16:57 **/public interface PersistEnum2DB<DB> { DB getData();}

import javax.persistence.AttributeConverter;/** * @param <ATTR> 實體類中枚舉的類型,需實現{@link PersistEnum2DB} 接口 * @param <DB> 保存到數據庫的數據類型 * @author peter * date: 2019-05-15 16:59 */public abstract class AbstractEnumConverter<ATTR extends Enum<ATTR> & PersistEnum2DB<DB>, DB> implements AttributeConverter<ATTR, DB> { private final Class<ATTR> clazz; public AbstractEnumConverter(Class<ATTR> clazz) { this.clazz = clazz; } @Override public DB convertToDatabaseColumn(ATTR attribute) { return attribute != null ? attribute.getData() : null; } @Override public ATTR convertToEntityAttribute(DB dbData) { if (dbData == null) return null; ATTR[] enums = clazz.getEnumConstants(); for (ATTR e : enums) { if (e.getData().equals(dbData)) { return e; } } throw new UnsupportedOperationException('枚舉轉化異常。枚舉【' + clazz.getSimpleName() + '】,數據庫庫中的值為:【' + dbData + '】'); }}使用方式

import com.tourcoo.parking.enums.convert2db.AbstractEnumConverter;import com.tourcoo.parking.enums.convert2db.PersistEnum2DB;/** * @author peter * create: 2019-05-15 14:33 **/public enum PayStatus implements PersistEnum2DB<Integer> { NONPAY(0, '未支付'), PAID(1, '已支付'); private int code; private String msg; PayStatus(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } @Override public Integer getData() { return code; } public static class Converter extends AbstractEnumConverter<PayStatus, Integer> { public Converter() { super(PayStatus.class); } }}

//支付狀態 @Convert(converter = PayStatus.Converter.class) private PayStatus payStatus;

補充: SpringBoot | Jpa 將Java枚舉映射為基本值類型

解決方法之一:

使用實體屬性類型轉換器AttributeConverter

場景假設:

在代碼中使用枚舉類來映射用戶性別(如下代碼所示),在數據庫中使用字符映射性別(M ,F),Hibernate提供了AttributeConverter解決上述場景的轉換問題

public enum Gender { MALE( ’M’ ), FEMALE( ’F’ ); private final char code; Gender(char code) { this.code = code; } public static Gender fromCode(char code) { if ( code == ’M’ || code == ’m’ ) { return MALE; } if ( code == ’F’ || code == ’f’ ) { return FEMALE; } throw new UnsupportedOperationException( 'The code ' + code + ' is not supported!' ); } public char getCode() { return code; }}

User實體類定義如下,重點在 @Convert(converter = GenderConverter.class)注釋

@Entity@Data@ToString@Table(name = 'user')public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; @Convert(converter = GenderConverter.class) private Gender gender;}

定義一個GenderConverter的類,需要實現AttributeConverter接口,實現convertToDatabaseColumn和convertToEntityAttribute,作用是分別封裝從實體類映射至數據庫字段數值的邏輯和從數據庫字段數值映射到代碼實體類中的枚舉類值。

public class GenderConverter implements AttributeConverter<Gender,Character> { @Override public Character convertToDatabaseColumn(Gender gender) { if ( gender == null ) { return null; } return gender.getCode(); } @Override public Gender convertToEntityAttribute(Character value) { if ( value == null ) { return null; } return Gender.fromCode( value ); }}測試

@SpringBootTest@Slf4jpublic class AttributeConverterTest { @Resource private UserRepository userRepository; @Test void should_user__when__give_user() { //given User user1 = new User(null,'Janny', Gender.FEMALE); User user2 = new User(null,'Tom', Gender.MALE); //when User actUser1 = userRepository.save(user1); User actUser2 = userRepository.save(user2); //then Assertions.assertNotNull(actUser1); Assertions.assertNotNull(actUser2); }}

Springboot JPA 枚舉Enum類型存入到數據庫的操作

例外Hibernate也提供其他的方法,如使用@Enumerated注解,詳情可閱讀這篇文檔

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Spring
相關文章:
主站蜘蛛池模板: 91福利国产在线观看香蕉 | 日本乱人伦片中文三区 | 香蕉视频在线观看国产 | 欧美日韩国产在线观看一区二区三区 | 国产精品亚洲一区二区三区在线播放 | 国产日韩精品视频一区二区三区 | 久久国产精品99久久久久久牛牛 | 性色生活片 | 久久精品一级 | 特级毛片aaa免费版 特级毛片a级毛免费播放 | 日韩欧美一区二区三区不卡在线 | 特级毛片www欧美 | 91亚洲国产成人久久精品网站 | 国产精品免费观看网站 | 91国高清视频 | 这里有精品 | 中文字幕一精品亚洲无线一区 | 中文字幕第98页小明免费 | 国内自拍第五一页 | 亚洲自偷自偷首页 | 亚洲午夜精品国产电影在线观看 | 国产大秀视频在线一区二区 | 久久久精品一区二区三区 | 99久久国产免费 - 99久久国产免费 | 欧美三级在线观看不卡视频 | 国产精品一区二区三区久久 | 伊人久久网站 | 女人高清性色生活片 | 国产一级视频免费 | 91精品网站 | 一级特黄特黄毛片欧美的 | 手机在线观看黄色 | 欧美日韩永久久一区二区三区 | 97久久久久国产精品嫩草影院 | 婷婷亚洲五月 | www.麻豆.com | 这里有精品 | 日韩在线视频中文字幕 | 国内女高中生一级毛片 | 国产精品综合视频 | 欧美三级在线看中文字幕 |