`

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 集合属性的表总是以外键和元素次序列作为联合主键。

分享到:
评论

相关推荐

    MyBatis执行SQL并将结果映射成Java对象.docx

    5. Executor执行器要处理的SQL信息是封装到一个底层对象MappedStatement中 该对象包括SQL语句 输入参数映射信息 输出结果映射信息 其中输入参数和输出结果的映射类型包括HashMap集合对象 POJO对象类型

    iBATIS介绍入门

    iBATIS是以SQL为中心的持久化层...iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。 iBATIS使用xml文件来映射这些输入以及输出。

    agile-mybatis : Mybatis扩展

    结果POJO映射 查询返回结果可以直接声明为POJO或POJO集合,其映射过程是依赖于cloud.agileframework:common-util对象深度转换器实现,所以支持 识别驼峰与下划线等风格属性的互转。只需声明,无需额外调用,以最低的...

    Hibernate 课件_配置文件详解

    我培训用的 Hibernate课件, 个人能力范围内精心整理,图文并茂. 希望能对大家学习 Hibernate 提供帮助. 这是第二篇, 内容如下:Hibernate...映射集合属性;延迟加载策略;映射组件属性;关联关系映射:双向 1-N;继承映射

    java6string源码-JdbcMapper:JdbcMapper是一个ORM,可以快速轻松地将普通SQL查询映射到各种POJO(Plai

    ORM(对象关系映射器),它使您能够编写普通的 SQL 查询,并使用它们从不同类型集合的数据库中快速轻松地选择 POJO(Plain Old Java 对象)。 类型安全贯穿始终,因此不需要强制转换或忽略警告。 有两种不同的方法...

    jfleet:JFleet使用来自JDBC的替代持久性方法来持久存储Java POJO的大型集合

    JFleet是一个Java库,它使用每个数据库提供程序中的最佳可用技术,以最快的速度持久保存在Java POJO的大型数据库集合中,并使用每个JDBC驱动程序实现中的替代持久性方法来实现它。 它的目标是使用可用的批处理持久...

    Hibernate实战(第2版 中文高清版)

     第6章 映射集合和实体关联   6.1 值类型的set、bag、list和map   6.1.1 选择集合接口   6.1.2 映射set   6.1.3 映射标识符bag   6.1.4 映射list   6.1.5 映射map   6.1.6 排序集合和有序集合  6.2 ...

    springmvc入门程序(下载后你不会后悔的)

    springmvc框架原理(掌握) 前端控制器、处理器映射器、处理器适配器、视图解析器 springmvc入门程序 ... 参数绑定(简单类型、pojo、集合类型(明天讲)) 自定义参数绑定(掌握) springmvc和struts2区别

    springmvc第一天课堂笔记

    springmvc框架原理(掌握) 前端控制器、处理器映射器、处理器适配器、视图解析... 参数绑定(简单类型、pojo、集合类型(明天讲)) 自定义参数绑定(掌握) springmvc和struts2区别 springmvc和struts2的区别

    Hibernate 中文 html 帮助文档

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4....

    使用反射技术和Facade模式演示封装数据库操作--ORM原理

    如果以上两个条件成立,那么书写操作数据库的代码很简单:只需呼叫FacadeForDAO.findModel(表名)方法,在表名参数给出实际数据库中表的名称就可以返回一个包含对应POJO类的对象的集合--非常简单--输入表名得到Java...

    Hibernate教程

    11. 与对象共事 11.1. Hibernate对象状态(object states) 11.2. 使对象持久化 11.3. 装载对象 11.4. 查询 11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的查询 ...

    hibernate 体系结构与配置 参考文档(html)

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 ...

    hibernate 框架详解

    11. 与对象共事 11.1. Hibernate对象状态(object states) 11.2. 使对象持久化 11.3. 装载对象 11.4. 查询 11.4.1. 执行查询 11.4.1.1. 迭代式获取结果(Iterating results) 11.4.1.2. 返回元组(tuples)的...

    Hibernate中文详细学习文档

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的...

    springmvc基础.docx

    springmvc基础 包含代码+知识点+详细解释 1. 什么是springmvc? 2. springmvc框架原理 前端控制器、处理器映射器、处理器适配器... 参数绑定(简单类型、pojo、集合类型) 自定义参数绑定 6. springmvc和struts2区别

    Hibernate+中文文档

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的...

    Hibernate参考文档

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.1.1. 迭代式获取结果(Iterating results) 10.4.1.2. 返回元组(tuples)的查询 10.4....

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的...

    HibernateAPI中文版.chm

    10. 与对象共事 10.1. Hibernate对象状态(object states) 10.2. 使对象持久化 10.3. 装载对象 10.4. 查询 10.4.1. 执行查询 10.4.2. 过滤集合 10.4.3. 条件查询(Criteria queries) 10.4.4. 使用原生SQL的...

Global site tag (gtag.js) - Google Analytics