標籤:
本部落格的目的:①總結自己的學習過程,相當於學習筆記 ②將自己的經驗分享給大家,相互學習,互相交流,不可商用內容難免出現問題,歡迎指正,交流,探討,可以留言,也可以通過以下方式聯絡。本人互連網技術愛好者,互連網技術發燒友微博:伊直都在0221QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.POJO 類和資料庫的對應檔 *.hbm.xml hibernate mapping
1)POJO 類和關聯式資料庫之間的映射可以用一個XML文檔來定義。
2)通過 POJO 類的資料庫對應檔,Hibernate可以理解持久化類和資料表之間的對應關係,也可以理解持久化類屬性與資料庫表列之間的對應關係,如何映射主鍵,如何映射關聯關係
3)在運行時 Hibernate 將根據這個對應檔來產生各種 SQL 陳述式
4)對應檔的副檔名為 .hbm.xml
2.對應檔說明
hibernate-mapping
類層次:class
主鍵:id
基本類型:property
實體引用類: many-to-one | one-to-one
集合:set | list | map | array
one-to-many
many-to-many
子類:subclass | joined-subclass
其它:component | any 等
查詢語句:query(用來放置查詢語句,便於對資料庫查詢的統一管理和最佳化)
每個Hibernate-mapping中可以同時定義多個類. 但更推薦為每個類都建立一個單獨的對應檔
3.詳細介紹參數
1)hibernate-mapping 節點
2)class節點
3)id 節點
① Hibernate 使用物件識別碼(OID) 來建立記憶體中的對象和資料庫表中記錄的對應關係. 對象的 OID 和資料表的主鍵對應. Hibernate 通過標識符產生器來為主鍵賦值
② Hibernate 推薦在資料表中使用代理主鍵, 即不具備業務含義的欄位. 代理主鍵通常為整數類型, 因為整數類型比字串類型要節省更多的資料庫空間.
③ 在對象-關係對應檔中, <id> 元素用來設定物件識別碼. <generator> 子項目用來設定標識符產生器.
④ Hibernate 提供了標識符產生器介面: IdentifierGenerator, 並提供了各種內建實現
1.increment 標識符產生器由 Hibernate 以遞增的方式為代理主鍵賦值
① Hibernate 會先讀取 NEWS 表中的主鍵的最大值, 而接下來向 NEWS 表中插入記錄時, 就在 max(id) 的基礎上遞增, 增量為 1. ② 適用範圍:測試 > 由於 increment 生存標識符機制不依賴於底層資料庫系統, 因此它適合所有的資料庫系統 > 適用於只有單個 Hibernate 應用進程訪問同一個資料庫的場合, 在叢集環境下不推薦使用它 > OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運行時會拋出異常2.identity 標識符產生器
① identity 標識符產生器由底層資料庫來負責產生標識符, 它要求底層資料庫把主鍵定義為自動成長欄位類型 ② 適用範圍: 適合db2/meysql ,不適合 oracle > 由於 identity 產生標識符的機制依賴於底層資料庫系統, 因此, 要求底層資料庫系統必須支援自動成長欄位類型. 支援自動成長欄位類型的資料庫包括: DB2, Mysql, MSSQLServer, Sybase 等 > OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運行時會拋出異常
3.sequence 標識符產生器
① sequence 標識符產生器利用底層資料庫提供的序列來產生標識符.
② Hibernate 在持久化一個 News 對象時, 先從底層資料庫的 news_seq 序列中獲得一個唯一的標識號, 再把它作為主索引值
③ 適用範圍: 底層資料庫支援序列的 orclae/db2 ,不適合 mysql
> 由於 sequence 產生標識符的機制依賴於底層資料庫系統的序列, 因此, 要求底層資料庫系統必須支援序列. 支援序列的資料庫包括: DB2, Oracle 等
> OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運行時會拋出異常
4.hilo 標識符產生器
① hilo 標識符產生器由 Hibernate 按照一種 high/low 演算法*產生標識符, 它從資料庫的特定表的欄位中擷取 high 值.
② Hibernate 在持久化一個 News 對象時, 由 Hibernate 負責產生主索引值. hilo 標識符產生器在產生標識符時, 需要讀取並修改 HI_TABLE 表中的 NEXT_VALUE 值.
③ 適用範圍:適用於所有資料,不依賴底層資料庫
> 由於 hilo 生存標識符機制不依賴於底層資料庫系統, 因此它適合所有的資料庫系統
> OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運行時會拋出異常
5.native 標識符產生器
① native 標識符產生器依據底層資料庫對自動產生標識符的支援能力, 來選擇使用 identity, sequence 或 hilo 標識符產生器.
② 適用範圍: 首選這種方式
> 由於 native 能根據底層資料庫系統的類型, 自動選擇合適的標識符產生器, 因此很適合於跨資料庫平台開發
> OID 必須為 long, int 或 short 類型, 如果把 OID 定義為 byte 類型, 在運行時會拋出異常
4)property節點
[原創]java WEB學習筆記81:Hibernate學習之路--- 對象關係對應檔(.hbm.xml):hibernate-mapping 節點,class節點,id節點(主鍵建置原則),property節點