Hibernate4自学入门(八)——集合映射

来源:互联网 发布:js删除指定class 编辑:程序博客网 时间:2024/06/06 02:19



1、Set集合——无序、不可重复

hbm.xml:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.gw.model"><class name="Student" table="t_student"><id name="id" column="stuId"><generator class="native"></generator></id><property name="name" column="stuName"></property><set name="image" table="t_image"> <key column="studentId"></key> <element column="imageName" type="string"></element></set></class></hibernate-mapping>

model

package com.gw.model;import java.util.Set;public class Student {private long id;private String name;private Set<String> image;public Set<String> getImage() {return image;}public void setImage(Set<String> image) {this.image = image;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + "]";}}

test:

<span style="white-space:pre"></span>@Test<span style="white-space:pre"></span>public void test() {<span style="white-space:pre"></span>Set<String> imageSet = new HashSet<String>();<span style="white-space:pre"></span><span style="white-space:pre"></span>imageSet.add("image1.png");<span style="white-space:pre"></span>imageSet.add("image2.png");<span style="white-space:pre"></span>imageSet.add("image3.png");<span style="white-space:pre"></span>//重复的加不进去<span style="white-space:pre"></span>imageSet.add("image3.png");<span style="white-space:pre"></span>Student s1=new Student();<span style="white-space:pre"></span><span style="white-space:pre"></span>s1.setImage(imageSet);<span style="white-space:pre"></span>session.save(s1);<span style="white-space:pre"></span><span style="white-space:pre"></span>}

获取:

@Testpublic void testSetFetch() {Student  student =(Student) session.get(Student.class, Long.valueOf(1));Iterator it =student.getImage().iterator();while(it.hasNext()){System.out.println(it.next());}}

注:几种方法的获取方式大同小异,下面省略
2、List集合——有序、可重复

hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.gw.model"><class name="Student2" table="t_student2"><id name="id" column="stuId"><generator class="native"></generator></id><property name="name" column="stuName"></property><list name="image" table="t_image2"> <key column="studentId"></key> <list-index column="imageIndex"></list-index> <element column="imageName" type="string"></element></list></class></hibernate-mapping>

model

package com.gw.model;import java.util.List;import java.util.Set;public class Student2 {private long id;private String name;private List<String> image;public List<String> getImage() {return image;}public void setImage(List<String> image) {this.image = image;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + "]";}}

test:

@Testpublic void testListSave() {List<String> imageList = new ArrayList<String>();imageList.add("image1.png");imageList.add("image2.png");imageList.add("image3.png");imageList.add("image4.png");Student2 s2= new Student2();s2.setImage(imageList);session.save(s2);}

3、Bag集合——无序、不可重复

概念:

Bag集合属于无序集合,映射时只需指定Set集合的key(外键列)、element(元素列),没有索引,也没有主键;

由于Bag集合没有主键,Bag数据表允许有重复值,Hibernate更新或删除一行数据时,要先删除全部集合,再重新创建集合,因而效率非常低下,可见Bag集合性能最差.

hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.gw.model"><class name="Student3" table="t_student3"><id name="id" column="stuId"><generator class="native"></generator></id><property name="name" column="stuName"></property><idbag name="image" table="t_image3"> <collection-id type="long" column="imageId"> <generator class="increment"></generator> </collection-id> <key column="studentId"></key> <element column="imageName" type="string"></element></idbag></class></hibernate-mapping>

model与List相同。


test:

@Testpublic void testBagSave() {List<String> imageList = new ArrayList<String>();imageList.add("image1.png");imageList.add("image2.png");imageList.add("image3.png");imageList.add("image4.png");Student3 s3= new Student3();s3.setImage(imageList);session.save(s3);}


4 、Map集合——键值对


<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.gw.model"><class name="Student4" table="t_student4"><id name="id" column="stuId"><generator class="native"></generator></id><property name="name" column="stuName"></property><map name="image" table="t_image4"><key column="studentId"></key><map-key type="string" column="imageKey"></map-key><element column="imageName" type="string"></element></map></class></hibernate-mapping>

model

package com.gw.model;import java.util.List;import java.util.Map;import java.util.Set;public class Student4 {private long id;private String name;private Map<String,String> image;public Map<String, String> getImage() {return image;}public void setImage(Map<String, String> image) {this.image = image;}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + "]";}}

test


@Testpublic void testMapSave() {Map<String,String> imageMap = new  HashMap<String,String>() ; imageMap.put("i1", "image1.png");imageMap.put("i2", "image2.png");imageMap.put("i3", "image3.png");imageMap.put("i4", "image4.png");Student4 s4= new Student4();s4.setImage(imageMap);session.save(s4);}



0 0
原创粉丝点击