ssh2學習記錄

SSH2框架相關注解數據庫

Spring自動裝備相關注解:app

@Repsoitorty---Dao類自動注入框架

@Service---業務類自動注入ide

@Controller---Action自動注入工具

@AutoWare---自動裝配已注入fetch

JPA相關注解ui

用於領域建模:spa

@Entity(name="EntityName")hibernate

必須對象

name:可選,對應數據中的一個表

@Tablename="",catalog="",schema=""

可選,一般和@Entity配合使用,只能標註在實體的class定義處,表示實體對應書庫表的信息

name:可選,表示表的是名稱,默認地,代表和實體名稱一直,只有在不一致的狀況下才須要指定表名稱

catalog:可選,表示catalog名稱,默認爲Catalog("");

Schema:可選表示schema名稱,默認爲Schema("");

@id

必須

定義了映射到數據庫表的主鍵的屬性,一個實體只能有一個屬性被映射爲逐漸,至於getXxxx()前。

@GeneratedValuestrategy=GenerationType,generator=""

可選

Staregy:表示主鍵生成策略,有AUTO,INDENTITY,SEQUENCETABLE四種,分別表示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:表示該屬性的讀取策略,有EAGERLAZY兩種,分別表示主支抓取和延遲加載,默認爲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 關聯 

相關文章
相關標籤/搜索