Hibernate学习笔记1— Hibernate中的集合映射
???? 数据库中表与表之间可以有一对多和多对多的关联关系,要在hibernate中映射表之间的关系时,就需要使用hibernate中的集合映射,所以很有必须了首先了解一下JDK中的常见的集合类型,再来学习如何映射这些集合类型。
< 一> jdk中常见的集合类型
JDK中常见的集合类型有Set,List,Map及各自的实现类。
1,Set 接口
?? Set 是一个接口,实例化的是其实现类,常用到的实现类是:HashSet,LinkedHashSet,TreeSet 。
???Set的特点是:加入的对象不得,并且固定顺序。HashSet内部使用hash算法保存元素对象,存取对象拉开距离芘其他实现类,是最常用的Set接口实现类; LinkedHashSet是HashSet的子类,内部使用链表数据结构保存数据,有固定顺序;TreeSet会排序保存的对象,被保存的对象要实现comparable接口,TreeSet按照重写的comparableTo()方法排序。
?
2,List接口
???? List对象包含的对象可以重复添加,并且记录添加的顺序.ArrayList和LinkedList是list接口的常用实现类。ArrayList类的内部使用数组来实现集合功能,所以对于随机读取添加的对象可以获得较好的效率.但是很显然,在使用ArrayList对象移除或者插入新对象时,其效率很低。LinkedList的在内部使用链表形式保存数据,因此从LinkedList对象中移除数据或者增加元素效率更高。
3,Map接口
????? Map对象中保存key/value形式的一对对象,key与value都是Object类型的变量 。二者是一对一的关系,key的值必须是唯一的。如果后加入的元素的key值在Map中已经存在,则将替换到原来的值.
Map常用实现类是HashMap,LinkedHashMap,TreeMap 。HashMap是基于哈希表的Map接口的实现,允许null作为key或者value的值。不记录key/value的顺序,且不保证?线程安全,查找key/value的效率比较高;LinkedHashMap内部使用链表保存元素,记录添加的顺序;TreeMap实现了Map和SortedMap接口,内部使用红黑树算法来排序加入的对象,还可以自定义排序规则实现排序功能,另外TreeMap中还有定义了一些自己的方法。Map接口的测试代码如下:
?
??
?
?说明:<set name="emails" table="email">行中,name为User类的emails属性,table值为与emails属性对应的数据库表。
????????? <key column="userid" foreign-key="id"></key>行中,key指定email表中的userid是外键,引用users表的id字段。
????????? <element type="java.lang.String" column="email"></element> 指定emails集合中元素的类型,每一个元素对应映射emails表中的email 字段。
?
2,映射List类型
????? 如前所述,List类型是一种有序的集合类型,所以保存List集合中的对象时,需要在数据库中同时记录元素的顺序。
测试实体仍然是上面的User对象,只不过是将emails属性的类型换成List即可。
User.hbm.xml中用户名和密码的映射与上面相同,emails部分映射如下:
?
?
3,映射Map类型
?修改List映射中的映射文件,将<list>标签部分替换如下,即可:
?
?
?
?
未完,待续!!!!
?
?