spirng data JPA教程(二)基本註解的使用

spirng data JPA教程(二)基本註解的使用

上篇文章講解了spring boot JPA的基本的增刪改查操作,這次我們主要講下實體類中基本註解的使用方法

spring boot JAP 中定義實體類時,用到的基本註解包括:

@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、@Enumerated、@Lob

下面首先依次解釋下每個註解的意思

再通過實例,練習下各個註解的使用
項目地址

1.基本註解

@Entity

應用於實體類,表明該實體類被JPA管理,將映射到指定的數據庫表

@Table

應用於實體類,通過name屬性指定對應該實體類對應數據庫中的表名

@Id

被@Id標記的屬性對應數據庫表的主鍵,一個實體類裏面必須有一個.

@GerneratedValue

於@Id一同使用,定義主鍵的生成策略,通過strategy屬性指定。

JPA提供的生成策略一共有4個值:

  • AUTO — JPA自動選擇合適的策略,是默認選項
  • IDENTITY — 採用數據庫ID自增長的方式生成主鍵值,一般用於MySQL數據庫,Oracle不支持這種方式;
  • SEQUENCE — 通過序列產生主鍵,通過@SequenceGenerator註解指定序列名,MySql不支持這種方式;
  • TABLE — 通過表產生主鍵,會生成一張表模擬序列產生主鍵,該策略通用性強易於數據庫的移植,但是效率低

@Basic

應用於實體類屬性,表明該字段是要映射到數據庫表,@Entity標註的實體類,所有屬性默認爲@Basic,@Baisc有兩個屬性:

  1. fetch:屬性的讀取策略,有EAGERLAZY兩種取值,分別表示主動抓取和延遲抓取,默認爲EAGER
  2. optional:表示該屬性是否可以爲null,默認值爲true

@Basic(fetch =FetchType.LAZY)標註某屬性時,表示只有調用Hibernate對象的該屬性的get方法時,纔會從數據庫表中查找對應該屬性的字段值

@Column

應用於實體類屬性,可以指定數據庫表字段的名字和其他屬性。其屬性包括:

  • name:表示數據庫表中該字段的名稱,默認情形屬性名稱一致。

  • nullable:表示該字段是否允許爲null,默認爲true

  • unique:表示該字段是否是唯一標識,默認爲false

  • length:表示該字段的大小,僅對String類型的字段有效。

  • insertable:表示在ORM框架執行插入操作時,該字段是否應出現INSETRT語句中,默認爲true

  • updateable:表示在ORM框架執行更新操作時,該字段是否應該出現在UPDATE語句中,默認爲true。對於一經創建就不能更改的字段,該屬性非常有用,比如email屬性。

  • columnDefinition

    :表示該字段在數據庫中的實際類型。通常ORM框架可以根據屬性類型自動判斷數據庫中字段的類型,但是依然有些例外:

    • Date類型無法確定數據庫中字段類型究竟是DATETIME還是TIMESTAMP
    • String的默認映射類型爲VARCHAR,如果希望將String類型映射到特定數據庫的BLOBTEXT字段類型,則需要進行設置

@Transient

作用在類屬性上,與@Basic作用相反,表明該屬性不需要持久化,JPA映射數據時忽略該屬性;

@Temporal

作用在類屬性上,用來設置Date類型的屬性映射到數據庫時的精度,

  • @Temporal(TemporalType.DATE)映射爲日期 // date (只有日期)
  • @Temporal(TemporalType.TIME)映射爲日期 // time (是有時間)
  • @Temporal(TemporalType.TIMESTAMP)映射爲日期 // date time (日期+時間)

@Lob

應用到實體類屬性上,表示將屬性映射成數據庫支持的大對象類型,Clob或者Blog。其中:

  • Clob(Character Large Ojects)類型是長字符串類型,java.sql.ClobCharacter[]char[]String 將被映射爲 Clob 類型。
  • Blob(Binary Large Objects)類型是字節類型,java.sql.BlobByte[]byte[] 和 實現了Serializable接口的類型將被映射爲 Blob 類型。

因爲這兩種類型的數據一般佔用的內存空間比較大,所以通常使用延遲加載的方式,與@Basic標註同時使用,設置加載方式爲FetchType.LAZY

2.基本註解的使用

好了,開始擼代碼

新建一個Blog類

@Entity
@Table(name = "t_blog")
public class Blog {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Basic
    private String title;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createtime;

    @Transient
    private String author;

    @Column(name = "blog_content", nullable = false)
    @Lob
    @Basic(fetch = FetchType.LAZY)
    private String content;
}

@Entity 告訴JPA該實體類Blog需要映射到數據庫

@Tabel 指定Blog類映射時,數據庫對應的表名爲t_blog

@Id @GeneratedValue 指定t_blog表的主鍵爲id,採用自增長的方式生成主鍵

@Basic 爲默認屬性,可以不指定

@Temporal 指定日期字段createtime的映射格式爲:日期+時間

@Transient 指定author字段不映射到數據庫表

@Column 指定字段content映射t_blog表時的列名爲blog_content,nullable = false 值不能爲null

@Lob 標明該字段爲大對象,並給該字段配置了懶加載

執行程序, 日誌顯示建表成功

打開navicate 刷新 ~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章