首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Hibernate常见会合映射(Set,List Array,Map,Bag)

2012-10-14 
Hibernate常见集合映射(Set,List Array,Map,Bag)Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等,

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集合元素不需要元素序号标识,元素也是可以重复的。

首先建立数据库表,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, 
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 

建立角色的实体类,代码如下:
Java代码
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如下:
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 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" />    //配置主键 
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测试代码如下:
Java代码
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.}   


热点排行