日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Data JPA 常用注解

發布時間:2025/4/16 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data JPA 常用注解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 創建表

@Entity聲明該類對應一個數據表實體(萬事萬物皆為對象)。

@Table 設置表名

@Entity @Table(name = "user") public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;省略getter/setter...... }

2. 創建主鍵

@Id :聲明一個字段為主鍵。

使用@Id聲明之后,可以使用 @GeneratedValue 指定主鍵生成策略。

使用 @GeneratedValue 指定主鍵生成策略的方式有兩種:

1. 通過 @GeneratedValue 可以直接使用 JPA 內置提供的四種主鍵生成策略來指定主鍵生成策略。

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

JPA 使用枚舉定義了 4 中常見的主鍵生成策略:

  • TABLETABLE:使用一個特定的數據庫表格來保存主鍵;
  • SEQUENCE:為Oracle、PostgreSQL等不支持主鍵自增長的數據庫提供了一種叫做“序列(sequence)"的主鍵生成機制;
  • IDENTITY:主鍵自增長;
  • AUTO:把主鍵生成策略交給持久化引擎,持久化引擎會根據數據庫在以上三種主鍵生成策略中選擇其中一種

@GeneratedValue 注解默認使用的策略是GenerationType.AUTO。 在關系型數據庫中使用GenerationType.IDENTITY策略比較普遍一點

public @interface GeneratedValue {GenerationType strategy() default AUTO;String generator() default ""; }

一般使用 MySQL 數據庫的話,使用GenerationType.IDENTITY策略比較普遍一點(分布式系統的話需要另外考慮使用分布式 ID)。

2. 通過 @GenericGenerator聲明一個主鍵策略,然后 @GeneratedValue使用這個策略

@Id @GeneratedValue(generator = "IdentityIdGenerator") @GenericGenerator(name = "IdentityIdGenerator", strategy = "identity") private Long id;

等價于:

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

3. 設置字段類型

@Column 聲明字段。

示例:

設置屬性 userName 對應的數據庫字段名為 user_name,長度為 32,非空

@Column(name = "user_name", nullable = false, length=32) private String userName;

設置字段類型并且加默認值:

Column(columnDefinition = "tinyint(1) default 1") private Boolean enabled;

4. 指定不持久化特定字段

@Transient :聲明不需要與數據庫映射的字段,在保存的時候不需要保存進數據庫 。

如果我們想讓secrect 這個字段不被持久化,可以使用 @Transient關鍵字聲明。

Entity(name="USER") public class User {......@Transientprivate String secrect; // not persistent because of @Transient}

除了 @Transient關鍵字聲明, 還可以采用下面幾種方法:

static String secrect; // not persistent because of static final String secrect = “Satish”; // not persistent because of final transient String secrect; // not persistent because of transient

一般使用注解的方式比較多。

5. 聲明大字段

@Lob:聲明某個字段為大字段。

@Lob private String content;

更詳細的聲明:

@Lob //指定 Lob 類型數據的獲取策略, FetchType.EAGER 表示非延遲 加載,而 FetchType. LAZY 表示延遲加載 ; @Basic(fetch = FetchType.EAGER) //columnDefinition 屬性指定數據表對應的 Lob 字段類型 @Column(name = "content", columnDefinition = "LONGTEXT NOT NULL") private String content;

6. 創建枚舉類型的字段

可以使用枚舉類型的字段,不過枚舉字段要用@Enumerated注解修飾。

public enum Gender {MALE("男性"),FEMALE("女性");private String value;Gender(String str){value=str;} } @Entity @Table(name = "role") public class Role {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String description;@Enumerated(EnumType.STRING)private Gender gender;省略getter/setter...... }

數據庫里面對應存儲的是 MAIL/FEMAIL。

7. 增加審計功能

在 JPA 中,支持在字段或者方法上進行注解@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 實現對數值設置的時間控制。

首先需要通過@EnableJpaAuditing開啟 JPA 審計功能。其中,

  • @CreatedDate:表示該字段為創建時間,在這個實體被 insert 的時候,會設置值
  • @CreatedBy :表示該字段為創建人,在這個實體被 insert 的時候,會設置值
  • @LastModifiedDate:表示該字段為最終修改時間
  • ``@LastModifiedBy`:表示該字段為最終修改人

8. 刪除/修改數據

@Modifying 注解提示 JPA 該操作是修改操作,注意還要配合@Transactional注解使用。

@Repository public interface UserRepository extends JpaRepository<User, Integer> {@Modifying@Transactional(rollbackFor = Exception.class)void deleteByUserName(String userName); }

9. 關聯關系

  • @OneToOne 聲明一對一關系
  • @OneToMany 聲明一對多關系
  • @ManyToOne聲明多對一關系
  • MangToMang聲明多對多關系

總結

以上是生活随笔為你收集整理的Spring Data JPA 常用注解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。