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;
}
@Override
public 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>}
获取:
@Test
public 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;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
test:
@Test
public 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:
@Test
public 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);
}
<?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;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
test
@Test
public 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);
}