這一節筆者主要介紹Hibernate常見的集合映射Set、List、Map和Bag等集合類型。
1. Set集合映射
Set集合的特點是集合的元素不可以重復且無序。Set集合是Hibernate中基礎的集合類型,元素數據一般使用外鍵同主表關聯,Set集合非常適用于集合元素不能重復的情況。
步驟:
1.建表。email_set、user_set
2.建立角色的實體類。UserSet.
PS:記得把Email建立為Set類型變量
3.建立Set類型的映射文件UserSet.hbm.xml
<!-- Set類型映射 -->
<set name="emails" table="email_set">
<key column="id"></key>
<element type="java.lang.String">
<column name="address"></column>
</element>
</set>
4.編寫測試類Test
2. List集合映射
List映射是有序的,所以在創建表的時候需要增加一個email_id來表示List的序號。
步驟:
1.建表。
2.建立實體類。
3.映射文件UserList.hbm.xml
<!-- List類型映射 -->
<list name="emails" table="email_list">
<key column="id"></key>
<index column="email_id"></index>
<element type="java.lang.String" column="email"></element>
</list>
4.編寫測試類Test
3.Map集合映射
Map集合的特點就是使用了鍵值對,即key-Value結構來存放集合元素,這樣就需要對應的集合元素數據庫表中包含對于Key的列。
步驟:
1.建表。email_map、user_map.
2.建立實體類。注意:類變量類型
3.映射文件。UserMap.hbm.xml
<!-- Map類型映射 -->
<map name="email" table="email_map">
<key column="id"></key>
<!-- 配置鍵值對 -->
<map-key column="email_id" type="java.lang.String"></map-key>
<element type="java.lang.String" column="email"></element>
</map>
4.Bag集合映射
前面介紹的Set集合是無序的,不能有重復元素的,Hibernate提供一個Bag集合,用來處理重復元素的問題。當然,這里Bag集合與List集合是不不同的。List的集合元素是有序的,需要有一個集合序號來標識集合元素的位置,List集合元素也是可以重復的。而Bag集合元素是不需要元素序號標識,元素也是可以重復的。
步驟:
1.建立兩個相關的數據庫表。email_bag、user_bag。
2.建立實體類Userbag。
3.映射文件UserBag.hbm.xml
<!-- Bag類型映射 -->
<bag name="email" table="email_bag">
<key column="id"></key>
<element type="string" column="email"></element>
</bag>
4.編寫測試類Test
5.Component映射
Component映射可以稱為組件映射,這里我們會介紹最簡單的組件映射,假設有一個用戶表c_user
該表是一個用戶信息表,可以將用戶信息歸納為兩個部分:一個部分是name(姓名),包含firstname(姓)和lastname(名);另一部分是Contact(聯系方式),包括address(地址)、zipcode(郵編)和tel(電話)等信息。在創建實體類時,可以將name和Contact分別封裝到2個獨立的類中,這樣就提高了系統的復用性和靈活性。也就是說,需要使用Component映射,將其他實體類映射在一起。
技術要點:Component映射就是將一個復雜的實體分解為多個簡單的,或者是易于管理的組件,然后組合在一起,形成一個完整的實體。
步驟:
1.建立一個相關的數據庫表.(將name和Contect都聯系在一起)。
2.建立實體類。Name、Contact類以及各自最后對應的Cuser類。
3.建立映射文件Cuser.hbm.xml
<!-- 配置組件映射 -->
<component name="name" class="*">
<property name="firstname" type="*">
<column name="firstname" length="50"></column>
</property>
<property name="lastname" type="*">
<column name="lastname" length="50"></column>
</property>
</component>
<component name="contact">
<!-- ...里面的代碼大致上是一致的 -->
</component>
4.建立測試文件Test