JPA之經常使用 基本註解

一、經常使用基本註解java

@Entity                                                          git

@Tablegithub

@Basic數據庫

@Column框架

@GeneratedValueide

@Id工具

二、特殊註解fetch

@Transientspa

@Temporalcode

用 table 來生成主鍵

三、經常使用註解的使用

一、@Entity 標註用於實體類聲明語句以前,指出該Java 類爲實體類,將映射到指定的數據庫表。如聲明一個實體類 Customer,它將映射到數據庫中的 customer 表上。

二、@Table

當實體類與其映射的數據庫表名不一樣名時須要使用 @Table 標註說明,該標註與 @Entity 標註並列使用,置於實體類聲明語句以前,可寫於單獨語句行,也可與聲明語句同行。

@Table 標註的經常使用選項是 name,用於指明數據庫的表名 @Table標註還有一個兩個選項 catalog 和 schema 用於設置表所屬的數據庫目錄或模式,一般爲數據庫名。

uniqueConstraints 選項用於設置約束條件,一般不須設置。以下代碼:

  • @Table(name="JPA_CUSTOMERS")//主要是映射表名對應的數據庫表名JPA_CUSTOMER默認狀況下能夠不寫表名與持久化類名相同
    @Entity //代表這是一個持久化類
    public class Customer {

 三、@Id

@Id 標註用於聲明一個實體類的屬性映射爲數據庫的主鍵列。該屬性一般置於屬性聲明語句以前,可與聲明語句同行,也可寫在單獨行上。 @Id標註也可置於屬性的getter方法以前

//定義主鍵,生成主鍵的策略AUTO自動的根據數據的類型生成主鍵
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Id //定義數據列
//    @Column(name="ID")//定義數據庫的列名若是與字段名同樣能夠省略
    public Integer getId() {
        return id;
    }

四、@GeneratedValue

@GeneratedValue 用於標註主鍵的生成策略,經過 strategy 屬性指定。默認狀況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 對應 identity,MySQL 對應 auto increment。 在 javax.persistence.GenerationType 中定義瞭如下幾種可供選擇的策略:

IDENTITY:採用數據庫 ID自增加的方式來自增主鍵字段,Oracle 不支持這種方式;

AUTO: JPA自動選擇合適的策略,是默認選項;

SEQUENCE:經過序列產生主鍵,經過 @SequenceGenerator 註解指定序列名,MySql 不支持這種方式

TABLE:經過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可使應用更易於數據庫移植。

五、@Basic

@Basic 表示一個簡單的屬性到數據庫表的字段的映射,對於沒有任何標註的 getXxxx() 方法,默認即爲

@Basic fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種,分別表示主支抓取和延遲加載,默認爲 EAGER.

optional:表示該屬性是否容許爲null, 默認爲true

六、@Column

當實體的屬性與其映射的數據庫表的列不一樣名時須要使用@Column 標註說明該屬性一般置於實體的屬性聲明語句以前,還可與 @Id 標註一塊兒使用。

@Column 標註的經常使用屬性是 name,用於設置映射數據庫表的列名。此外,該標註還包含其它多個屬性,如:unique 、nullable、length 等。

@Column 標註的 columnDefinition 屬性: 表示該字段在數據庫中的實際類型.一般 ORM 框架能夠根據屬性類型自動判斷數據庫中字段的類型,可是對於Date類型仍沒法肯定數據庫中字段類型到底是DATE,TIME仍是TIMESTAMP.此外,String的默認映射類型爲VARCHAR, 若是要將 String 類型映射到特定數據庫的 BLOB 或TEXT 字段類型.

@Column標註也可置於屬性的getter方法以前

 

四、特殊註解的使用

一、@Transient

.表示該屬性並不是一個到數據庫表的字段的映射,ORM框架將忽略該屬性.

.若是一個屬性並不是數據庫表的字段映射,就務必將其標示爲@Transient,不然,ORM框架默認其註解爲@Basic

//工具方法,不須要映射爲數據表的一列
    @Transient
    public String getInfo(){
        return "lastName:"+lastName+",email:"+email;
    }

 

二、@Temporal

在覈心的 Java API 中並無定義 Date 類型的精度(temporal precision). 而在數據庫中,表示 Date 類型的數據有 DATE, TIME, 和 TIMESTAMP 三種精度(即單純的日期,時間,或者二者 兼備).

在進行屬性映射時可以使用@Temporal註解來調整精度.

 

@Temporal(TemporalType.TIMESTAMP)// 時間戳
    public Date getCreatedTime() {
        return createdTime;
        }

@Temporal(TemporalType.DATE) //時間精確到天
    public Date getBirth() {
        return birth;
    }

三、table生成主鍵的使用(用的比較少)

將當前主鍵的值單獨保存到一個數據庫的表中,主鍵的值每次都是從指定的表中查詢來得到 這種方法生成主鍵的策略能夠適用於任何數據庫,沒必要擔憂不一樣數據庫不兼容形成的問題。

     //使用table生成主鍵
    @TableGenerator(name="ID_GENERATOR",
            table="JPA_ID_GENERATORS", 
            pkColumnName="PK_NAME",
            pkColumnValue="CUSTOMER_ID",
            valueColumnName="PK_VALUE",
            allocationSize=100
            )
    
    @GeneratedValue(strategy=GenerationType.TABLE,generator="ID_GENERATOR")
    @Id
    public Integer getId() {
        return id;
    }

其中:

一、name 屬性表示該主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的generator 值中

二、table 屬性表示表生成策略所持久化的表名

三、pkColumnName 屬性的值表示在持久化表中,該主鍵生成策略所對應鍵值的名稱

四、valueColumnName 屬性的值表示在持久化表中,該主鍵當前所生成的值,它的值將會隨着每次建立累加

五、pkColumnValue 屬性的值表示在持久化表中,該生成策略所對應的主鍵

六、allocationSize 表示每次主鍵值增長的大小, 默認值爲 50

關係圖:

 

源碼地址:https://github.com/wuhongpu/JPA.git

相關文章
相關標籤/搜索