SSH2框架相關注解數據庫
Spring自動裝備相關注解:app
@Repsoitorty---Dao類自動注入框架
@Service---業務類自動注入ide
@Controller---Action自動注入工具
@AutoWare---自動裝配已注入fetch
JPA相關注解ui
用於領域建模:spa
@Entity(name="EntityName")hibernate
必須對象
name:可選,對應數據中的一個表
@Table(name="",catalog="",schema="")
可選,一般和@Entity配合使用,只能標註在實體的class定義處,表示實體對應書庫表的信息
name:可選,表示表的是名稱,默認地,代表和實體名稱一直,只有在不一致的狀況下才須要指定表名稱
catalog:可選,表示catalog名稱,默認爲Catalog("");
Schema:可選表示schema名稱,默認爲Schema("");
@id
必須
定義了映射到數據庫表的主鍵的屬性,一個實體只能有一個屬性被映射爲逐漸,至於getXxxx()前。
@GeneratedValue(strategy=GenerationType,generator="")
可選
Staregy:表示主鍵生成策略,有AUTO,INDENTITY,SEQUENCE和TABLE四種,分別表示1、讓ORM框架自動選擇
二、更具數據庫的identity字段生成
三、更具數據表的sequence字段生成,以有更具一個額外的表生成主鍵,默認爲Auto
Generator:表示根據逐漸生成器的名稱,這個屬性一般和ORM框架相關,例如,hibernate能夠指定uuid等逐漸生成方式
示例:
@id
@GeneratedValues(strategy=Strategy.SEQUENCE)
public int getPk(){
return pk;
}
@Basic(fetch=FetchType,optional=true)
可選
@Basic表示一個簡單的屬性到數據庫表的字段映射,對於沒有任何標註的getXxxx()方法,默認即爲@Basic
Fetch:表示該屬性的讀取策略,有EAGER和LAZY兩種,分別表示主支抓取和延遲加載,默認爲EAGER
Optional:表示該屬性是否容許爲null,默認爲true
示例:
@Basic(optional=false)
public String getAddress(){
return address;
}
@Column 可選
@Column 描述了數據庫表中該字段的詳細定義 , 這對於根據 JPA 註解生成數據庫表結構的工具很是有做用 .
name: 表示數據庫表中該字段的名稱 , 默認情形屬性名稱一致
nullable: 表示該字段是否容許爲 null, 默認爲 true
unique: 表示該字段是不是惟一標識 , 默認爲 false
length: 表示該字段的大小 , 僅對 String 類型的字段有效
insertable: 表示在 ORM 框架執行插入操做時 , 該字段是否應出現 INSETRT 語句中 , 默認爲 true
updateable: 表示在 ORM 框架執行更新操做時 , 該字段是否應該出如今 UPDATE 語句中 , 默認爲 true. 對於一經建立就不能夠更改的字段 , 該屬性很是有用 , 如對於 birthday 字段 .
columnDefinition: 表示該字段在數據庫中的實際類型 . 一般 ORM 框架能夠根據屬性類型自動判斷數據庫中字段的類型 , 可是對於 Date 類型仍沒法肯定數據庫中字段類型到底是 DATE,TIME 仍是 TIMESTAMP. 此外 ,String 的默認映射類型爲 VARCHAR, 若是要將 String 類型映射到特定數據庫的 BLOB 或 TEXT 字段類型 , 該屬性很是有用 .
示例 :
@Column(name="BIRTH",nullable="false",columnDefinition="DATE")
public String getBithday() {
return birthday;
}
@Transient
可選
@Transient 表示該屬性並不是一個到數據庫表的字段的映射 ,ORM 框架將忽略該屬性 .
若是一個屬性並不是數據庫表的字段映射 , 就務必將其標示爲 @Transient, 不然 ,ORM 框架默認其註解爲 @Basic
示例 :
// 根據 birth 計算出 age 屬性
@Transient
public int getAge() {
return getYear(new Date()) - getYear(birth);
}
@ManyToOne(fetch=FetchType,cascade=CascadeType ) 可選
@ManyToOne 表示一個多對一的映射 , 該註解標註的屬性一般是數據庫表的外鍵
optional: 是否容許該字段爲 null, 該屬性應該根據數據庫表的外鍵約束來肯定 , 默認爲 true
fetch: 表示抓取策略 , 默認爲 FetchType.EAGER
cascade: 表示默認的級聯操做策略 , 能夠指定爲 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若干組合 , 默認爲無級聯操做
targetEntity: 表示該屬性關聯的實體類型 . 該屬性一般沒必要指定 ,ORM 框架根據屬性類型自動判斷 targetEntity.
示例 :
// 訂單 Order 和用戶 User 是一個 ManyToOne 的關係
// 在 Order 類中定義
@ManyToOne()
@JoinColumn(name="USER")
public User getUser() {
return user;
}
@JoinColumn
可選
@JoinColumn 和 @Column 相似 , 介量描述的不是一個簡單字段 , 而一一個關聯字段 , 例如 . 描述一個 @ManyToOne 的字段 .
name: 該字段的名稱 . 因爲 @JoinColumn 描述的是一個關聯字段 , 如 ManyToOne, 則默認的名稱由其關聯的實體決定 .
例如 , 實體 Order 有一個 user 屬性來關聯實體 User, 則 Order 的 user 屬性爲一個外鍵 ,
其默認的名稱爲實體 User 的名稱 + 下劃線 + 實體 User 的主鍵名稱
示例 :
見 @ManyToOne
@OneToMany(fetch=FetchType,cascade=CascadeType)
可選
@OneToMany 描述一個一對多的關聯 , 該屬性應該爲集體類型 , 在數據庫中並無實際字段 .
fetch: 表示抓取策略 , 默認爲 FetchType.LAZY, 由於關聯的多個對象一般沒必要從數據庫預先讀取到內存
cascade: 表示級聯操做策略 , 對於 OneToMany 類型的關聯很是重要 , 一般該實體更新或刪除時 , 其關聯的實體也應當被更新或刪除
例如 : 實體 User 和 Order 是 OneToMany 的關係 , 則實體 User 被刪除時 , 其關聯的實體 Order 也應該被所有刪除
示例 :
@OneTyMany(cascade=ALL)
public List getOrders() {
return orders;
}
@OneToOne(fetch=FetchType,cascade=CascadeType)
可選
@OneToOne 描述一個一對一的關聯
fetch: 表示抓取策略 , 默認爲 FetchType.LAZY
cascade: 表示級聯操做策略
示例 :
@OneToOne(fetch=FetchType.LAZY)
public Blog getBlog() {
return blog;
}
@ManyToMany
可選
@ManyToMany 描述一個多對多的關聯 . 多對多關聯上是兩個一對多關聯 , 可是在 ManyToMany 描述中 , 中間表是由 ORM 框架自動處理
targetEntity: 表示多對多關聯的另外一個實體類的全名 , 例如 :package.Book.class
mappedBy: 表示多對多關聯的另外一個實體類的對應集合屬性名稱
示例 :
User 實體表示用戶 ,Book 實體表示書籍 , 爲了描述用戶收藏的書籍 , 能夠在 User 和 Book 之間創建 ManyToMany 關聯