Hibernate常见的集合映射 Set,List,Array,Map,Bag

Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等,它们的特点如下:
1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集合非常适用于集合元素不能重复的情况。
2) Set集合是无序的,集合元素并不是按照一定的顺序排列的,而List集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。
3) 数组Array使用的是List的方式来表示的。
4) Map集合的特点是使用键值对,即Key-Value结构来存放集合元素,这样就需要对应的集合元素数据库表中包含对于Key的列。
5) Set集合石无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。 Bag集合映射和List不同,List的集合元素是有序的,需要有一个 集合元素序号 来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要 元素序号 标识,元素也是可以重复的。

注: List 和 Set在Hibernate中的配置不同, List元素配置的时候有一个<index>(集合元素序号)子元素需要配置,相对有点繁琐,一般情况下,集合元素使用set就行。


首先建立数据库表,SQL语句如下:
Sql代码
1. CREATE TABLE ‘message’(  
2.    'id' int(11) NOT NULL,  
3.    'setValue' varchar(100) NOT NULL,  
4.    'listValue_id' int(11) NOT NULL,  //集合元素序号, 在Hibernate配置为List类型时需要用到
5.    'listValue' varchar(100) NOT NULL,  
6.    'arrayValue_id' int(11) NOT NULL,  
7.    'arrayValue' varchar(100) NOT NULL,  
8.    'mapValue_id' int(11) NOT NULL,  
9.    'mapValue' varchar(100) NOT NULL,  
10.    'bagValue' varchar(100) NOT NULL  
11. )ENGINE = InnoDB DEFAULT CHARSET = gbk  
12.   
13. CREATE TABLE 'master'(  
14.    'id' int(11) NOT NULL auto_increment,  
15.    'name' varchar(100) NOT NULL default '',  
16.    PRIMARY KEY('id')  
17. )ENGINE = InnoDB DEFAULT CHARSET = gbk 

 

建立角色的实体类,代码如下:
1. import java.io.Serializable;  
2. import java.util.List;  
3. import java.util.Map;  
4. import java.util.Set;  
5.   
6. @SuppressWarnings({ "unchecked", "serial" })  
7. public class Master implements Serializable {  
8.     private Integer id;      //主键ID属性  
9.     private String name;   //姓名name属性  
10.     private Set setValue;  
11.     private List listValue;  
12.     private String[] arrayValue;  
13.     private Map mapValue;  
14.     private List bagValue;  
15.       
16.     public Integer getId() {  
17.         return id;  
18.     }  
19.     public void setId(Integer id) {  
20.         this.id = id;  
21.     }  
22.     public String getName() {  
23.         return name;  
24.     }  
25.     public void setName(String name) {  
26.         this.name = name;  
27.     }  
28.     public Set getSetValue() {  
29.         return setValue;  
30.     }  
31.     public void setSetValue(Set setValue) {  
32.         this.setValue = setValue;  
33.     }  
34.     public List getListValue() {  
35.         return listValue;  
36.     }  
37.     public void setListValue(List listValue) {  
38.         this.listValue = listValue;  
39.     }  
40.     public String[] getArrayValue() {  
41.         return arrayValue;  
42.     }  
43.     public void setArrayValue(String[] arrayValue) {  
44.         this.arrayValue = arrayValue;  
45.     }  
46.     public Map getMapValue() {  
47.         return mapValue;  
48.     }  
49.     public void setMapValue(Map mapValue) {  
50.         this.mapValue = mapValue;  
51.     }  
52.     public List getBagValue() {  
53.         return bagValue;  
54.     }  
55.     public void setBagValue(List bagValue) {  
56.         this.bagValue = bagValue;  
57.     }  
58. }  



类Message的Hibernate映射文件Message.hbm.xml如下:
1. <?xml version="1.0" encoding="utf-8"?>  
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
4. <!--  
5.     Mapping file autogenerated by MyEclipse Persistence Tools 
6. -->  
7. <hibernate-mapping>  
8.     <class name="com.iprai.hibernate.collectionmapping" table="master" catalog="iprai">  
9.         <id name="id" type="java.lang.Integer">  
10.             <column name="id" />  
11.             <generator class="native"></generator>  
12.         </id>  
13.         <property name="name" type="java.lang.String">  
14.             <column name="name" length="100" not-null="true" />  
15.         </property>  
16.         <!--Set类型映射-->  
17.         <set name="setValue" table="message">    //定义对应的表  
18.         <key column="id" />  
19.             <element type="java.lang.String">  
20.                <column name="setValue" />  
21.             </element>  
22.         </set>  
23.           
24.         <!--List类型映射-->  
25.         <List name="listValue" table="message">  
26.            <key column="id" />  
27.            <index column="listValue_id" />    <span style="color:#ff0000;">//配置集合元素序号</span>  
28.        <element type="java.lang.String" column="listValue" />  
29.         </List>  
30.           
31.         <!--Array类型映射-->  
32.         <array name="arrayValue" table="message">     
33.             <key column="id"/>     
34.             <list-index column="arrayValue_id"/>     
35.             <element type="java.lang.String" column="arrayValue"/>   
36.         </array>   
37.   
38.         <!--Map类型映射-->  
39.         <map name="mapValue" table="message">  
40.            <key column="id" />  
41.            <!--配置键值对-->  
42.            <map-key column="mapValue_id" type="java.lang.String" />  
43.            <element type="java.lang.String" column="mapValue" />  
44.         </map>  
45.   
46.         <!--Bag类型映射-->  
47.         <bag name="bagValue" table="message">  
48.            <key column="id" />     //定义主键  
49.            <element type="string" column="bagValue" />  //定义元素类型  
50.        </bag>  
51.     </class>  
52. </hibernate-mapping>  



JUnit测试代码如下:
1. import java.util.ArrayList;     
2. import java.util.HashMap;     
3. import java.util.HashSet;     
4. import java.util.List;     
5. import java.util.Map;     
6. import java.util.Set;     
7.   
8. import org.hibernate.Session;     
9.     
10. import junit.framework.TestCase;     
11.     
12. public class MasterTest extends TestCase {     
13.          
14.     public void testSave() {     
15.         Master master = new Master();     
16.         master.setName("JavaEye");     
17.           
18.         Set setValue = new HashSet();     
19.         setValue.add("a");     
20.         setValue.add("b");     
21.         master.setSetValue(setValue);     
22.              
23.          List listValue = new ArrayList();     
24.          listValue.add("c");     
25.          listValue.add("d");     
26.          master.setListValue(listValue);     
27.               
28.          String[] arrayValue = new String[]{"e", "f"};     
29.          master.setArrayValue(arrayValue);     
30.               
31.          Map mapValue = new HashMap();     
32.          mapValue.put("key_1", "value_1");     
33.          mapValue.put("key_2", "value_2");     
34.          master.setMapValue(mapValue);     
35.   
36.          List bagValue = new ArrayList();  
37.          bagValue.add("h");  
38.          bagValue.add("i");  
39.          master.setBagValue(bagValue);  
40.               
41.          Session session = null;     
42.          try {     
43.              session = HibernateUtils.getSession();     
44.              session.beginTransaction();     
45.              session.save(c);     
46.              session.getTransaction().commit();     
47.          }catch(Exception e) {     
48.              e.printStackTrace();     
49.              session.getTransaction().rollback();     
50.          }finally {     
51.              HibernateUtils.closeSession(session);     
52.          }    
53.     }        
54. }    


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值