快速學習Spring Data JPA -- 第四章JPA常用註解
阿新 • • 發佈:2018-11-01
xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!
JPA常用註解:
@Entity、@Table、@Id、@IdClass、
@GeneratedValue、@Basic、@Transient、@Column、@Temporal、
@Enumerated、@Lob
觀察一個類,我們通過類來看使用到的註解及含義:
package com.echo.example.example.entity;
import lombok.Data;
import javax.persistence. *;
import java.util.Date;
/**
* author:XLecho
* Date:2018/10/26 0026
* Time:10:52
*/
@Data
@Entity
@Table(name = "tb_proson")
public class Proson {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Basic
@Column(name = "age", nullable = true, length = 3)
private Integer age;
@Basic(fetch = FetchType.LAZY)
@Column(name = "sex")
@Lob
private String sex;
@Column(name = "phone")
private String phone;
@Column(name = "email")
private String email;
@Column(name = "address")
private String address;
@Column(name = "createDate")
@Temporal(TemporalType.DATE)
private Date createDate;
@Transient
private String qq;
}
@Entity
定義物件將會成為被JPA管理的實體,將對映到指定的資料庫表。
@Table
指定資料庫的表名。注意如果這個註解沒有name=“table”這個屬性類指定表名,那麼就不會起作用。
它的屬性有以下幾個:
- name:指定表名稱
- catalog: 指定資料庫名稱,預設為當前配置的資料庫
- schema: 指定資料庫的使用者名稱 ,預設為當前配置的使用者
- uniqueConstraints:指定唯一性欄位約束,如為personid 和name 欄位指定唯一性約束
- index: 用於指定對應的索引
@Id
定義屬性為資料庫的主鍵,一個實體裡面必須有一個
@GeneratedValue
為主鍵生成策略,主鍵生成策略有四種:
- AUTO主鍵由程式控制, 是預設選項 ,不設定就是這個
- IDENTITY:採用資料庫ID自增長的方式來自增主鍵欄位,Oracle 不支援這種方式;
- SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator 註解指定序列名,MySql不支援這種方式
- TABLE:通過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可以使應用更易於資料庫移植。
@Basic
表示屬性是到資料庫表的欄位的對映。如果實體的欄位上沒有任何註解,預設即為@Basic
@Column
定義該屬性對應資料庫中的列名,它有以下屬性:
- name:表示資料庫表中列的名稱,預設為屬性或欄位名稱
- nullable:可選,表示該欄位是否允許為null,預設為true(null)若設定為false 則該列不可為null值
- unique:可選,表示該欄位是否是唯一標識,預設為false(不唯一)若為true 則表示該列唯一如 uuid, email, mobile 等屬性
- length:可選,表示該欄位的大小,僅對String型別的欄位有效,預設值 255.用來自定義列的長度 如 mobile (length=11)
- insertable:表示在使用“INSERT”指令碼插入資料時,是否需要插入該欄位的值
- updatable:表示在使用“UPDATE”指令碼插入資料時,是否需要更新該欄位的值。insertable和updatable屬性一般多用於只讀的屬性,例如主鍵和外來鍵等。這些欄位的值通常是自動生成的。
- table:表示當對映多個表時,指定表的表中的欄位。預設值為主表的表名。
- precision和scale:precision屬性和scale屬性表示精度,當欄位型別為double時,precision表示數值的總長度,scale表示小數點所佔的位數。
@Transient
表示非持久化屬性,當建立表的時候不會生成該欄位。與@Basic作用相反。JPA對映資料庫的時候忽略它。
@Temporal
用來設定Date型別的屬性對映到對應精度的欄位。這個註解有三種策略:
- @Temporal(TemporalType.DATE)——》實體類會封裝成日期“yyyy-MM-dd”的 Date型別。
- @Temporal(TemporalType.TIME)——》實體類會封裝成時間“hh-MM-ss”的 Date型別。
- @Temporal(TemporalType.TIMESTAMP)——》實體類會封裝成完整的時間“yyyy-MM-dd hh:MM:ss”的 Date型別。
@Enumerated
直接對映enum列舉型別的欄位。
@Lob
將屬性對映成資料庫支援的大物件型別,支援以下兩種數
據庫型別的欄位。
- Clob(Character Large Ojects)型別是長字串型別,java.sql.Clob、Character[]、char[]和String將被
- Blob(Binary Large Objects)型別是位元組型別,java.sql.Blob、Byte[]、byte[]和實現了Serializable介面的型別將被對映為Blob型別
- Clob、Blob佔用記憶體空間較大,一般配合@Basic(fetch=FetchType.LAZY)將其設定為延遲載入。
做一個有底線的部落格主