1. 程式人生 > >Hibernate 進階(1)

Hibernate 進階(1)

  • Hibernate 關聯關係
      單向關聯:例如物品和使用者構建單向關係,則可以通過使用者檢視物品,去不能通過物品檢視使用者。
      雙向關聯:兩者之間可以互相訪問。
      關係可以分為:單向1-N,單向N-1,單向N-N,單向1-1;雙向1-1,雙向1-N,雙向N-N。

  • 單向N-1關聯

    1的一方需要有一個Set集合型別是的N的一方,而且還需要在N的一方的關係對映檔案中新增:

<!-- name(該對映檔案類中的屬性名) class(該對映檔案中屬性名對應的類的完整地址) column(在資料庫中的列名) cascade(級聯操作) -->
<many-to-one name="wm_f_wt_id" class="WorkType" column="wt_f_id" cascade="save-update"></many-to-one>
  • 單向1-N關聯
    1的一方還是需要一個Set集合型別是N的一方,1的一方的對映檔案中需要新增
		<!-- name(該對映檔案的類中的屬性名) -->
		<set name="">
		<!-- column(該類中的列名,外來鍵名) -->
			<key column=""/>
			<!-- class(N方完整的類名) -->
			<one-to-many class=""/>
		</set>
  • 雙向1-N關聯
    1的一方需要有Set集合型別是N的一方,對映檔案中需要新增單向1-N中1的要新增的內容;N的一方需要有1的物件 並且需要在N的對映檔案中新增1-N中N的對映檔案中需要新增的內容。


  • 基於外來鍵的1-1關聯
    基於外來鍵的單向1-1在POJO類中的程式碼的編寫方式可以參考單向的N-1,因為N的一端或1的一段都是直接訪問關聯的實體。對於對映配置,兩者也是類似的,只不過是基於外來鍵的單向1-1需要在原有的<many-to-one>元素中設定unique屬性為true,用以表示N的一端必須唯一,通過在N的一段新增約束的方法,將單向N-1變成等同於外來鍵的單向1-1關聯關係。


  • 基於主鍵的單向1-1關聯
    需要在對映檔案中新增<one-to-one name="" class="" constrained="true"/>(name 該類中屬性的名稱,class該屬性對應的類的完整的類名 constrained需要置成true)


  • 基於外來鍵的雙向1-1關聯
    像上面的基於外來鍵的單向1-1關聯相似,需要在一個類的對映檔案中新增<many-to-one>並且還是需要新增一個unique=“true”屬性在另一個類的對映檔案中新增<one-to-one > 這樣的話新增<many-to-one>的類所建立的表就變成了從表。


  • 基於主鍵的雙向1-1關聯
    和基於主鍵的單向1-1相似,只不過是在另一個需要關聯的對映檔案中也添加了<one-to-one>從而建立了一對一關聯關係。


  • 單向N-N
    在主關聯類中有Set集合型別是對方的型別,然後都需要在其對映檔案中新增:
		<!-- name(該類中的屬性) table(中間表名) cascade(級聯型別)-->
		<set name="roles" table="sys_user_role" cascade="save-update" >
		<!-- 建立表的外來鍵名 -->
			<key column="user_id" ></key>
			<!-- class(對方的完整類名) column(對方的外來鍵列名) -->
			<many-to-many class="Role" column="role_id" ></many-to-many>
		</set>
  • 雙向N-N關聯
    和單向N-N關聯相似,只不過是在每個類中都進行了單向N-N關聯中的操作。也可以分成兩單向1-N關聯,中間表為1,兩表為N.

屬性名|描述

  • | :
    cascade|級聯操作:save-update 級聯儲存更新;deleted 級聯刪除;all 級聯儲存更新刪除。只推薦使用sace-update
    fetch|抓取策略可以是join(外連線)和select(選擇)兩值之一
    lazy|指定關聯實體的延遲載入特性
  • HQL檢索
    是一種面向物件的查詢語言。它所操作的物件都是類、物件、屬性等。select wm_name from WorkMessage where wm_id='10'group by wm_type order by wm_id desc把WorkMessage資訊以wm_type分組之後按wm_id增加的方式排序,獲得wm_id=10的wm_name;
    Query介面的方法及描述
方法名 描述
int executeUpdate() 執行更新刪除等操作之後,返回受影響的記錄數
Iterator iterate() 返回一個Iterator物件,使用者迭代查詢的結果集。使用該方法時,首先要檢索ID欄位,然後根據ID欄位到Hibernate的一級和二級快取中查詢匹配的物件,如果存在就直接放到結果集中,如果不存在則執行select 查詢資料庫放到結果集中,該方法比list()的效能要高。
List list() 返回的結果以list的形式
Query setFirstResult(int first) 設定開始檢索的起始位置,引數first表示物件的查詢結果中的索引位置,索引位置的起始值為0,預設情況下Query介面從索引位置為0的物件開始檢索
Query setMaxResult(int max) 設定一次最多的檢出數目,預設情況下是所有的物件,和setFirstResult一起使用可以實現分頁效果
Object uniqueResult() 返回單個物件,如果沒有查詢到則返回null
Query setParameter(String name,Object val) 用於繫結任意型別的引數。

如果對您有用希望點個贊,若是哪裡有寫的不好的請及時留言,在您的幫助下會多寫出更好的總結,謝謝。