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();
		//枚举输出或者foreach
		while(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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值