1. 程式人生 > >快速學習Spring Data JPA -- 第四章JPA常用註解

快速學習Spring Data JPA -- 第四章JPA常用註解

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)將其設定為延遲載入。

做一個有底線的部落格主