Hibernate的集合映射
Set 接口set类型的对象,被加入的对象不能重复,同时被加入的对象也没有固定的顺序
Hashset
import java.util.HashSet;import java.util.Iterator;//Hashset 不记录先后顺序,不能加重复的public class HashSetExample {public static void main(String[] args){HashSet set =new HashSet();set.add(new Integer(30));set.add(new Double(20.5));set.add("I am Narcissus");set.add(new Person());Iterator it=set.iterator();//枚举输出或者foreachwhile(it.hasNext()){System.out.println(it.next());}}}LinkedHashSet
import java.util.LinkedHashSet;import java.util.Set;public class LinkedHashSetExample {//记录先后顺序,但不能添加重复public static void main(String[] args) {Set set = new LinkedHashSet();set.add(new Integer(30));set.add(new Double(20.5));set.add(new Double(100.00));set.add(new Integer(90));for(Object o:set){System.out.println(o);}}}TreeSet
import java.util.Set;import java.util.TreeSet;public class TreeSetExample {//可以排序,按照升序排列元素,不可以重复public static void main(String[] args) {Set set = new TreeSet();set.add(new Integer(30));set.add(new Integer(20));set.add(new Integer(100));set.add(new Integer(90));for(Object o:set){System.out.println(o);}}}
Set映射
使用set接口的实现类,实现对持久化对象保存相关联的数据。
例如:用户定义一个User类,User类中使用Set对象保存用户的多个email
<!-- table="email"是email的表 ,column="email是email中的email字段--><set name="emails" table="email"><key column="userid" foreign-key="id" /><element type="java.lang.String" column="email" /></set>
List接口
List对象所包含的对象,可以重复加入,同时还会记录加入的对象的先后顺序。
ArrayList
记录先后顺序,可以加入重复的
LinkedList
记录先后顺序,可以加入重复的,效率比arraylist稍高
list映射
存储list对象的集合时,需要在数据库一并存储记录的顺序
<list name="emails" table="email"><key column="userid" foreign-key="id" /><index column="idx" type="java.lang.Integer"></index><element type="java.lang.String" column="email" /></list>
bag映射
bag对象允许重复的元素,但是不记录添加对象的先后顺序。
在jdk中没有提供bag集合的类型,Hibernate中bag映射使用的是自己的bag类型
bag的类型 org.hibernate.collection.PersistentBag
<bag name="emails" table="email"><key column="userid" foreign-key="id" /><element type="java.lang.String" column="email" /></bag>
IdBag映射
bag集合映射的一种扩展,Hibernate提供还提供IdBag映射,可以在定义Bag映射时,为每个加入的对象指定id;
Map接口
map对象中保存的是key/value形式的一个对象,key与value都是object类型的变量,key与value是一一对应的关系,key值不能重复
HashMap
对象不会记录先后顺序
LinkedHaspMap
记录先后顺序
TreeMap
会把key值进行排序
Map映射
Map对象所包含的每一个对象(value)都有一个key与之对应,所以将map集合对象的数据存储到数据库表的时候,必须同时储存value对应的key值
<map name="phone" table="phone" order-by="phone_number"> <key column="userid" foreign-key="id"></key> <map-key type="java.lang.String" column="usage"></map-key> <element type="java.lang.String" column="phone_number"></element> </map>
集合映射的排序:
利用<set>或<map>标签的sort属性对集合中的数据进行排序
<map name="phone" table="phone" sort="natural"> <key column="userid" foreign-key="id"></key> <map-key type="java.lang.String" column="usage"></map-key> <element type="java.lang.String" column="phone_number"></element> </map>
利用sql的order by子句排序
<map name="phone" table="phone" order-by="phone_number" desc> <key column="userid" foreign-key="id"></key> <map-key type="java.lang.String" column="usage"></map-key> <element type="java.lang.String" column="phone_number"></element> </map>
页:
[1]