javascript
Spring Data JPA 常用注解
1. 創(chuàng)建表
@Entity聲明該類對應(yīng)一個數(shù)據(jù)表實(shí)體(萬事萬物皆為對象)。
@Table 設(shè)置表名
@Entity @Table(name = "user") public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;省略getter/setter...... }2. 創(chuàng)建主鍵
@Id :聲明一個字段為主鍵。
使用@Id聲明之后,可以使用 @GeneratedValue 指定主鍵生成策略。
使用 @GeneratedValue 指定主鍵生成策略的方式有兩種:
1. 通過 @GeneratedValue 可以直接使用 JPA 內(nèi)置提供的四種主鍵生成策略來指定主鍵生成策略。
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;JPA 使用枚舉定義了 4 中常見的主鍵生成策略:
- TABLETABLE:使用一個特定的數(shù)據(jù)庫表格來保存主鍵;
- SEQUENCE:為Oracle、PostgreSQL等不支持主鍵自增長的數(shù)據(jù)庫提供了一種叫做“序列(sequence)"的主鍵生成機(jī)制;
- IDENTITY:主鍵自增長;
- AUTO:把主鍵生成策略交給持久化引擎,持久化引擎會根據(jù)數(shù)據(jù)庫在以上三種主鍵生成策略中選擇其中一種
@GeneratedValue 注解默認(rèn)使用的策略是GenerationType.AUTO。 在關(guān)系型數(shù)據(jù)庫中使用GenerationType.IDENTITY策略比較普遍一點(diǎn)
public @interface GeneratedValue {GenerationType strategy() default AUTO;String generator() default ""; }一般使用 MySQL 數(shù)據(jù)庫的話,使用GenerationType.IDENTITY策略比較普遍一點(diǎn)(分布式系統(tǒng)的話需要另外考慮使用分布式 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. 設(shè)置字段類型
@Column 聲明字段。
示例:
設(shè)置屬性 userName 對應(yīng)的數(shù)據(jù)庫字段名為 user_name,長度為 32,非空
@Column(name = "user_name", nullable = false, length=32) private String userName;設(shè)置字段類型并且加默認(rèn)值:
Column(columnDefinition = "tinyint(1) default 1") private Boolean enabled;4. 指定不持久化特定字段
@Transient :聲明不需要與數(shù)據(jù)庫映射的字段,在保存的時候不需要保存進(jìn)數(shù)據(jù)庫 。
如果我們想讓secrect 這個字段不被持久化,可以使用 @Transient關(guān)鍵字聲明。
Entity(name="USER") public class User {......@Transientprivate String secrect; // not persistent because of @Transient}除了 @Transient關(guān)鍵字聲明, 還可以采用下面幾種方法:
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;更詳細(xì)的聲明:
@Lob //指定 Lob 類型數(shù)據(jù)的獲取策略, FetchType.EAGER 表示非延遲 加載,而 FetchType. LAZY 表示延遲加載 ; @Basic(fetch = FetchType.EAGER) //columnDefinition 屬性指定數(shù)據(jù)表對應(yīng)的 Lob 字段類型 @Column(name = "content", columnDefinition = "LONGTEXT NOT NULL") private String content;6. 創(chuàng)建枚舉類型的字段
可以使用枚舉類型的字段,不過枚舉字段要用@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...... }數(shù)據(jù)庫里面對應(yīng)存儲的是 MAIL/FEMAIL。
7. 增加審計功能
在 JPA 中,支持在字段或者方法上進(jìn)行注解@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 實(shí)現(xiàn)對數(shù)值設(shè)置的時間控制。
首先需要通過@EnableJpaAuditing開啟 JPA 審計功能。其中,
- @CreatedDate:表示該字段為創(chuàng)建時間,在這個實(shí)體被 insert 的時候,會設(shè)置值
- @CreatedBy :表示該字段為創(chuàng)建人,在這個實(shí)體被 insert 的時候,會設(shè)置值
- @LastModifiedDate:表示該字段為最終修改時間
- ``@LastModifiedBy`:表示該字段為最終修改人
8. 刪除/修改數(shù)據(jù)
@Modifying 注解提示 JPA 該操作是修改操作,注意還要配合@Transactional注解使用。
@Repository public interface UserRepository extends JpaRepository<User, Integer> {@Modifying@Transactional(rollbackFor = Exception.class)void deleteByUserName(String userName); }9. 關(guān)聯(lián)關(guān)系
- @OneToOne 聲明一對一關(guān)系
- @OneToMany 聲明一對多關(guān)系
- @ManyToOne聲明多對一關(guān)系
- MangToMang聲明多對多關(guān)系
總結(jié)
以上是生活随笔為你收集整理的Spring Data JPA 常用注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将外部知识整合到群体智能中,以获得更具体
- 下一篇: 使用brew安装Logstash(Mac