`

POJO对象与映射文件 : 集合映射

阅读更多
集合属性大致有两种:第一种是单纯的集合属性,如像 List、Set 或数组等集合属性;另一种是Map结构的集合属性,每个属性值都有对应的Key映射。

  集合映射的元素大致有如下几种:

List: 用于映射 List 集合属性
Set: 用于映射 Set 集合属性
Map: 用于映射 Map 集合性
Array: 用于映射数组集合属性
Bag: 用于映射无序集合
idbag: 用于映射无序集合,但为集合增加逻辑次序


List方式:要求在映射文件中配置List时加一个标示顺序列,此列给hibernate用来记录数据的插入顺序
1. List 集合属性
List是有序集合,因此持久化到数据库时也必须增加一列来表示集合元素的次序。看下面的持久化类,该 News 类有个集合属性:schools ,该属性对应学校。而集合属性只能以接口声明,因此下面代码中,schools 的类型能是List ,不能是ArrayList ,但该集合属性必须使用实现类完成初始化。

import java.util.List;


public class Department {
	private Integer id;
	private String name;
	private List<User1> users;
	
	public List<User1> getUsers() {
		return users;
	}

	public void setUsers(List<User1> users) {
		this.users = users;
	}

	public Department(){}
	
	public Department(String name) {
		this.name = name;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
}




此时的映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.hibernate.domain">

	<class name="Department" table="Department">
		<id name="id" unsaved-value="-1">
			<generator class="native" />
		</id>
		<property name="name"/>
		<list name="users" inverse="false">
		    <key column="deptid"/>
		    <list-index column="listindex"/>
		    <one-to-many class="User1"/>
		</list>
	</class>
</hibernate-mapping>


这时访问可以使用list

Department department2 = (Department)session.get(Department.class, 1);
		
		List<User1> userList = department2.getUsers();
		
		for(User1 user1 : userList){
			System.out.println(user1.getName());
		}



2使用bag作为映射格式

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.hibernate.domain">

	<class name="Department" table="Department">
		<id name="id" unsaved-value="-1">
			<generator class="native" />
		</id>
		<property name="name"/>

		<bag name="users">
			<key column="deptid"/>
			<one-to-many class="User1"/>
		</bag>
	</class>
</hibernate-mapping>


此时访问必须使用list,不能使用Set

3·使用Map


使用Map:
public class Department {
   private int id;
   private String name;
   //private Set<Employee> emps;
   //private List<Employee> emps;
   private Map<String,Employee> emps;



		<map name="emps">
		   <key column="departId"/>
		   <map-key type="string" column="name"/>
		   <one-to-many class="Employee"/>
		</map>


因为Map要使用键值对,所以要提供键,<map-key type=”string” column=”name”/>
注意:
1) type=”string”,不能写成type=”String”  !!!!
2) column=”name”,指使用dempatment对象的name值作为key,如果你写成别的,比如:name1,表结构就会加上此列




总结:
集合性能的分析
对于集合属性,通常推荐使用延迟加载策略。所谓延迟加载就是当系统需要使用集合属性时才从数据库装载关联的数据。 Hibernate 对集合属性默认采用延迟加载,在某些特殊的情况下为 set,,list,map 等元素设置lazy="false" 属性来取消延迟加载。
可将集合分成如下两类:

有序集合:集合里的元素 可以根据 Key 或 Index 访问
无序集合:集合里的元素中能遍历
有序集合的属性有增加、删除及修改中拥有较好的性能表现。在设计较好的 Hiberate domain Object 中,集合属性通常都会增加 inverse="true" 的属性,此时集合端不再控制关联关系。映射 Set 集合属性时,如果 element 元素包括 not-null="true" 属性,则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键,但 List 集合属性的表总是以外键和元素次序列作为联合主键。

分享到:
评论

相关推荐

    数据表生成pojo

    - Hibernate:在Hibernate中,POJO作为持久化对象,通过注解或XML配置与数据库表进行映射。查询时,Hibernate将SQL结果自动转化为POJO实例。 - MyBatis:MyBatis允许开发者自由编写SQL,将结果集映射到POJO,提供...

    用pojo对象作birt的数据源

    而`POJO_Resource`可能包含了有关POJO对象创建或与BIRT结合使用的示例代码或资源。 总的来说,利用POJO对象作为BIRT的数据源,可以更好地融合Java应用的业务逻辑,使报告生成更加灵活,同时减少了数据转换的复杂性...

    java Pojo转Map

    对于这种情况,你可能需要进一步扩展`pojoToMap`方法,例如添加递归处理以支持嵌套的Pojo对象,或者处理集合类型字段时将其转换为List, Object&gt;&gt;。 总的来说,Java的Pojo到Map的转换是提高代码可读性和灵活性的有效...

    mybatis_02 输入输出映射 动态sql 对象关系映射 整合

    `resultType`适用于简单的结果集映射,其中SQL语句的列名必须与Java对象的属性名完全匹配。这种方式简单直观,但在实际应用中,由于数据库字段命名规范和Java对象属性命名规范的不同,常常无法一一对应。 **示例:*...

    深入理解hibernate映射文件

    在配置Java属性映射和集合映射时,可以通过`cascade`属性来覆盖此默认值。 - `default-access`: 指定Hibernate默认的属性访问策略,默认值为`property`,表示使用getter和setter方法访问属性。 - `default-lazy`: ...

    hibernate3.0 和数据库生成pojo类的工程方法

    这个文件通常与POJO类一起使用,使得Hibernate知道如何在对象和数据库之间转换。 8. **配置SessionFactory**: 在应用程序中,你需要配置SessionFactory,它是Hibernate的核心组件,负责管理数据库连接和事务。...

    SpringBoot中mybatis表关联映射关系(一对多嵌套:结果方式)

    * `ofType`:与 `javaType` 属性对应,指定的是映射到 List 集合属性中 POJO 的类型。 * `property`:指定从类映射到的主实体类对象属性。 MyBatis 在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套...

    Java的几种对象(PO-VO-DAO-BO-POJO)解释

    O/R Mapping(对象关系映射)是一种编程技术,用于将对象模型与关系数据库模型进行映射。在Java中,常见的O/R Mapping框架有Hibernate、MyBatis等。通过O/R Mapping,开发者可以更加高效地操作数据库,减少重复代码...

    根据hibernate.cfg.xml文件生成POJO数据库表的工具类

    在Java的Web开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL的细节。`hibernate.cfg.xml`是Hibernate配置文件,用于定义数据库连接...

    hibernate学习笔记

    - **组件集合映射**:将一个包含多个复杂对象的集合映射到数据库中。 #### 集合关系映射 Hibernate支持多种集合类型的映射: - **Set**:无序、不重复的集合。 - **List**:有序、允许重复的集合。 - **Bag**:...

    hibernate-note学习笔记

    - **组件集合映射**: 映射组件的集合。 **2.5 集合关系映射** - **Set**: 无序且不允许重复的集合。 - **List**: 有序且允许重复的集合。 - **Bag**: 无序但允许重复的集合,通常用Java中的List来模拟。 - **Map**:...

    iBATIS_In_Action:使用映射语句(一).doc

    使用`&lt;resultMap&gt;`元素定义结果集映射,可以指定列名与对象属性的对应关系,以及如何处理多行或多表结果。 4.3 查询条件 通过参数对象,我们可以轻松地传递查询条件。例如,如果我们有一个`SearchCriteria`对象,...

    Hibernate开发指

    2. 集合映射:List、Set、Map等集合类型的映射。 3. 联合主键:多个字段共同构成主键的映射。 4. 继承映射:单表继承、多表继承和表-per-hierarchy等策略。 八、性能优化 1. 分页查询:避免一次性加载大量数据,...

    映射多对多及一对一关系

    2. **配置映射文件** `Employees.hbm.xml`: ```xml &lt;key column="empid"&gt;&lt;/key&gt; &lt;many-to-many class="com.test.pojo.Roles"&gt; &lt;column name="roleid"&gt;&lt;/column&gt; ``` - `&lt;set&gt;`元素用于表示集合,这里是...

    Mybatis映射文件实例详解

    总结来说,MyBatis映射文件实例展示了如何通过XML配置文件来实现SQL语句与Java对象的绑定。它涵盖了基本的简单类型参数传递、POJO对象的使用,以及如何处理复杂的查询条件。通过这些配置,开发者可以方便地将业务...

    hibernate4.1中文api

    - **集合的基本类型和可嵌入的对象**: 映射集合中的不同类型。 - **高级集映射**: - **排序的集合**: 如何排序集合中的元素。 - **双向关联**: 处理集合中的双向关联。 - **三元关联**: 复杂场景下的关联映射。 ...

    Mybatis框架学习

    - **一对多关联映射**:通常需要在 POJO 类中定义 List 集合来存储多个相关联的对象。 #### 缓存机制 MyBatis 提供了一级缓存和二级缓存的支持: - **一级缓存**:SqlSession 范围内的缓存,当同一个 SqlSession ...

    基于Schema 的Web 框架设计

    1. **减少紧耦合**:通过Schema文件定义POJO对象与数据库表之间的映射关系,使得更改数据库表结构时无需修改大量代码。 2. **易于扩展**:由于POJO对象与数据库表的解耦,可以更容易地添加新的POJO对象或者数据库表...

    java的几种对象(PO_VO_DAO_BO_POJO)解释

    在实体框架或ORM(对象关系映射)工具中,PO对象作为桥梁,将Java对象与数据库记录相互转换,使得开发者能够以面向对象的方式操作数据库数据。 ### 值对象(VO) 值对象(VO)是一种无状态的对象,它代表了一组值...

Global site tag (gtag.js) - Google Analytics