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) | 用於繫結任意型別的引數。 |
如果對您有用希望點個贊,若是哪裡有寫的不好的請及時留言,在您的幫助下會多寫出更好的總結,謝謝。