1、Hibernate集合类映射Hibernate集合类映射1 Java 集合类介绍Java中的集合类用于存储一组对象,其中的每一个对象称之为元素。Java.util包提供经常使用的java集合类有ArrayList、Hashset、HashMap、HashTable等。这些类都是java.util.Collection和java.util.Map接口的一些实现类。java.util.Collection是顶层的一个接口类。java.util.List、java.util.Set、java.util.StoreSet是三个继承Collection接口的子接口。而常用的java.util.Vecto
2、r、java.util.ArrayList、java.util.HashSet、java.util.TreeSet等则是上述三个子接口的实现类。java.util.Map也是最顶层的接口类,该类只有一个子接口即java.util.SortedMap,另外java提供了Map的多个实现类,如java.util.HashMap、java.util.HashTable、java.util.TreeMap等。Java集合类主要分三种类型:Set:集合。元素不按照特定方式排序,并且不可有重复List:集合。元素按照索引位置排序,可以有重复Map:集合。每个元素由一个键值对(key-value)组成,键对
3、象不能重复,但是值对象可以重复Set s = new HashSet();Iterator itr = s.itorator(); /获取HashSet 对象的循环指示器While (itr.hasNext()) System.out,println(String) itr.next() );List a = new ArrayList();For(int i=0; i=a.size();i+) /根据ArrayList对象的索引值循环读取 System.out,println(i+”:” + (String) a.get(i) );Map h = new hashMap();h.put(“0
4、01” , “Hibernate”);h.put(“002”,”Struts”);h.put(“003”, “Spring”);Iterator itr_key = h.keySet().iterator(); /获取HashMAp对象的键集合的循环指示器While(itr_key.hasNext() String key=(String)itr_key.next(); System.out,println(key+ “ :”+(String) h.next(key) );集合类的使用方式总结:Set:与Iterator接口结合使用,使用循环指示器循环读取Set集合中的元素List:使用元素索
5、引值顺序读取List集合中的元素Map:首先使用循环指示器获取Map的键集合中的键对象,然后通过键对象读取值对象。2 Hibernate的集合类映射根据java集合类的特点,Hibernate中可以分为如下几种集合类映射:无序,通常用于一对多或多对多关联关系映射。:有序,必须要有一个索引字段。:无序,必须要有一个映射关键字字段。:有序,必须要有一个索引字段。:有序,必须要有一个索引字段不同的接口类需要映射到不同的Hibernate集合类映射元素集合类接口常用实现类映射元素Java.util.SetJava.util.ArrayListJava.util.VectorJava.util.Coll
6、ectionJava.util.HashSetJava.util.ArrayListJava.util.MapJava.util.HashMapJava.util.HashtableJava.util.StoreSetJava.util.TreeSetJava.util.StoreMapJava.util.TreeMap3 集合类映射的定义集合类映射的一般定义格式: importjava.util.List;importjava.util.Map;importjava.util.Set; 1. publicclassCollectionMapping 2. privateintid; 3. p
7、rivateStringname; 4. privateSetsetValues; 5. privateListlistValues; 6. privateStringarrayValues; 7. privateMapmapValues; 8. publicStringgetArrayValues()returnarrayValues; 9. publicvoidsetArrayValues(StringarrayValues) 10. this.arrayValues=arrayValues; 11. 12. publicintgetId() returnid; 13. publicvoi
8、dsetId(intid) this.id=id; 14. publicListgetListValues() returnlistValues; 15. publicvoidsetListValues(ListlistValues) 16. this.listValues=listValues; 17. 18. publicMapgetMapValues() returnmapValues; 19. publicvoidsetMapValues(MapmapValues) 20. this.mapValues=mapValues; 21. 22. publicSetgetSetValues(
9、) returnsetValues; 23. publicvoidsetSetValues(SetsetValues) 24. this.setValues=setValues; 25. 26. publicStringgetName() returnname; 27. publicvoidsetName(Stringname) this.name=name; 28. 1. 2. !DOCTYPEhibernate-mappingPUBLIC 3. -/Hibernate/HibernateMappingDTD3.0/EN4. 5. 6. 8. 9. 10. 11. 12. 13. 14. 1
10、5. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 4 Hibernate关联关系映射目录 单向关联 一对一外键单向关联 一对一主键单向关联 一对一连接表单向关联 一对多外键单向关联 一对多连接表单向关联 多对一外键单向关联 多对一连接表单向关联 多对多单向关联双向关联 一对一外键双向关联 一对一主键双向关联 一对一连接表双向关联 一对多外键双向关联 一对多连接表双向关联 多对多双向关联41 一对一外键单向关联模型一个人(Person)对应一个地址(address)实体:public class Pers
11、on private int personid; private String name; private int age; private Address address;public class Address private int addressid; private String addressdetail;表模型address+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| addressid | int(11) | NO | PRI | NULL | auto_increment
12、| addressdetail | varchar(255) | YES | | NULL | |+-+- +-+-+-+-+person;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| personid | int(11) | NO | PRI | NULL | auto_increment | name | varchar(255) | YES | | NULL | | age | int(11) | YES | | NULL | | addressId | int(11) | YES |
13、 UNI | NULL | |+- +-+-+-+-+-+映射方法: 在Person中添加Address属性,映射配置为: 42一对一主键单向关联1-1的关联可以基于主键关联,但基于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成。另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加constrained=true属性,表明该类主键由关联类生成。模型: 一个人(Person)对应一个地址(Address)实体: public class Person private int personid; private String name; priv
14、ate int age; private Address address;public class Address private int addressid; private String addressdetail; 表模型address+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| addressid | int(11) | NO | PRI | NULL | auto_increment | addressdetail | varchar(255) | YES | | NULL | |
15、+-+- +-+-+-+-+person;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+- +-+-+-+-+-+| personid | int(11) | NO | PRI | NULL | auto_increment | name | varchar(255) | YES | | NULL | | age | int(11) | YES | | NULL | | addressId | int(11) | YES | UNI | NULL | |+- +-+-+-+-+-+映射方法:在Person中配置id生成
16、策略为: address . address 43 一对一连接表单向关联这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N-1的many-to-one元素增加unique=true属性即可。public class Person private int personid; private String name; private int age; private Address address;public class Address private int addressid; private String addressdetail;表结构address;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| addressid | int(11) | NO | PRI | NULL | auto_increment | addressdetail | varchar(255) | YES | | NULL | |+-+-+-+-+-+-+join;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| personid |
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1