`

hibernate详解(三)----->>组件映射(一)

阅读更多

 

     Hibernate建议在进行领域模型建模时要细粒度一些,简单地说,就是类要比表多,这种映射方式就是组件(component)映射。
     组件类是值类型的,即它没有对象标识符属性,在数据库中也没有对应的表,它只隶属于另一个持久化类的实例。它的数据被嵌入到所隶属的持久化实例对应的数据库表的记录中。
     组件映射的应用有三种常见情况:把组件类作为持久化类的单个属性来使用、把组件类作为持久化类的集合属性来使用、把组件类作为持久化类的对象标识符来使用。下面分别来介绍。

 

       1、组件类作为持久化类的单个属性

       定义一个Address类(它是值类型的),代码如下:

 

  Address.java

 

Java代码 复制代码 收藏代码
  1. package com.zxf.domain;   
  2.   
  3.   
  4. /**  
  5.  *  地址类  
  6.  *  值类型,它没有对象标识符属性。  
  7.  *  只能隶属于一个持久化类的实例,它的数据也是被嵌入到所隶属的持久化实例对应的数据库表的记录的。  
  8.  */  
  9. public class Address {   
  10.     private String province;      //省份名   
  11.     private String city;          //城市   
  12.     private String detail;        //地址详情,如街道,小区,门牌号等   
  13.     private String zipcode;       //邮编   
  14.     private String telephone;     //固定电话   
  15.     private String mobilephone;   //移动电话   
  16.        
  17.     public Address(){}            //无参数的构造方法   
  18.   
  19.     //以下省略所有属性的getters和setters方法...   
  20. }  
package com.zxf.domain;


/**
 *  地址类
 *  值类型,它没有对象标识符属性。
 *  只能隶属于一个持久化类的实例,它的数据也是被嵌入到所隶属的持久化实例对应的数据库表的记录的。
 */
public class Address {
	private String province;      //省份名
	private String city;          //城市
	private String detail;        //地址详情,如街道,小区,门牌号等
	private String zipcode;       //邮编
	private String telephone;     //固定电话
	private String mobilephone;   //移动电话
	
	public Address(){}            //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

 

  Customer.java

 

 

Java代码 复制代码 收藏代码
  1. package com.zxf.domain;   
  2.   
  3.   
  4. /** 客户持久化类(实体类) */  
  5. public class Customer {   
  6.     private Long id;                       //对象标识符(OID)   
  7.     private String loginname;              //登录名   
  8.     private String password;               //密码   
  9.     private String email;                  //邮箱号   
  10.     private Address homeAddress;           //联系地址   
  11.     private Address deliverAddress;        //送货地址   
  12.        
  13.     public Customer(){}                     //无参数的构造方法   
  14.   
  15.     //以下省略所有属性的getters和setters方法...   
  16. }  
package com.zxf.domain;


/** 客户持久化类(实体类) */
public class Customer {
	private Long id;                       //对象标识符(OID)
	private String loginname;              //登录名
	private String password;               //密码
	private String email;                  //邮箱号
	private Address homeAddress;           //联系地址
	private Address deliverAddress;        //送货地址
	
	public Customer(){}                     //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

 

  Customer.hbm.xml

 

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.     <class name="com.zxf.domain.Customer" table="customer">  
  8.         <id name="id"  column="id" type="long">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="loginname" not-null="true"/>  
  12.         <property name="password" not-null="true"/>          
  13.         <property name="email"/>  
  14.            
  15.         <!-- 用component元素映射组件类属性homeAddress -->  
  16.         <component name="homeAddress" class="com.zxf.domain.Address">  
  17.             <!-- 用property映射组件类的每个属性 -->  
  18.             <property name="province" column="home_province"/>  
  19.             <property name="city" column="home_city"/>  
  20.             <property name="detail" column="home_detail"/>  
  21.             <property name="zipcode" column="home_zipcode"/>  
  22.             <property name="telephone" column="home_telephone"/>  
  23.             <property name="mobilephone" column="home_mobilephone"/>  
  24.         </component>  
  25.         <!-- 用component元素映射组件类属性deliverAddress -->  
  26.         <component name="deliverAddress" class="com.zxf.domain.Address">  
  27.             <property name="province" column="deliver_province"/>  
  28.             <property name="city" column="deliver_city"/>  
  29.             <property name="detail" column="deliver_detail"/>  
  30.             <property name="zipcode" column="deliver_zipcode"/>  
  31.             <property name="telephone" column="deliver_telephone"/>  
  32.             <property name="mobilephone" column="deliver_mobilephone"/>  
  33.         </component>  
  34.     </class>  
  35. </hibernate-mapping>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.zxf.domain.Customer" table="customer">
		<id name="id"  column="id" type="long">
			<generator class="native" />
		</id>
		<property name="loginname" not-null="true"/>
		<property name="password" not-null="true"/>		
		<property name="email"/>
		
		<!-- 用component元素映射组件类属性homeAddress -->
		<component name="homeAddress" class="com.zxf.domain.Address">
			<!-- 用property映射组件类的每个属性 -->
			<property name="province" column="home_province"/>
			<property name="city" column="home_city"/>
			<property name="detail" column="home_detail"/>
			<property name="zipcode" column="home_zipcode"/>
			<property name="telephone" column="home_telephone"/>
			<property name="mobilephone" column="home_mobilephone"/>
		</component>
		<!-- 用component元素映射组件类属性deliverAddress -->
		<component name="deliverAddress" class="com.zxf.domain.Address">
			<property name="province" column="deliver_province"/>
			<property name="city" column="deliver_city"/>
			<property name="detail" column="deliver_detail"/>
			<property name="zipcode" column="deliver_zipcode"/>
			<property name="telephone" column="deliver_telephone"/>
			<property name="mobilephone" column="deliver_mobilephone"/>
		</component>
	</class>
</hibernate-mapping>

 

   配置文件:hibernate.cfg.xml

 

 

Xml代码 复制代码 收藏代码
  1. <!DOCTYPE hibernate-configuration PUBLIC   
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.            
  8.         <!-- 数据库方言设置 -->  
  9.         <property name="hibernate.dialect">  
  10.             org.hibernate.dialect.MySQLInnoDBDialect   
  11.         </property>  
  12.            
  13.         <!-- 数据库连接参数设置 -->  
  14.         <property name="hibernate.connection.driver_class">  
  15.             com.mysql.jdbc.Driver   
  16.         </property>  
  17.         <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>  
  18.         <property name="hibernate.connection.username">root</property>  
  19.         <property name="hibernate.connection.password">123</property>  
  20.        
  21.         <!--实际操作数据库时是否显示SQL -->  
  22.         <!--   
  23.         <property name="hibernate.show_sql">true</property>-->  
  24.         <property name="hibernate.format_sql">true</property>  
  25.            
  26.            
  27.         <!--将数据库schema的DDL导出到数据库 -->  
  28.         <property name="hibernate.hbm2ddl.auto">update</property>  
  29.   
  30.         <!-- 以下定义实体类与数据库表的映像文件 -->  
  31.         <mapping resource="com/zxf/domain/Customer.hbm.xml" />  
  32.     </session-factory>  
  33. </hibernate-configuration>  
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		
		<!-- 数据库方言设置 -->
		<property name="hibernate.dialect">
			org.hibernate.dialect.MySQLInnoDBDialect
		</property>
		
		<!-- 数据库连接参数设置 -->
		<property name="hibernate.connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
	
		<!--实际操作数据库时是否显示SQL -->
		<!-- 
		<property name="hibernate.show_sql">true</property>-->
		<property name="hibernate.format_sql">true</property>
		
		
		<!--将数据库schema的DDL导出到数据库 -->
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- 以下定义实体类与数据库表的映像文件 -->
		<mapping resource="com/zxf/domain/Customer.hbm.xml" />
	</session-factory>
</hibernate-configuration>

 

 

  2、组件类作为持久化类的集合属性

 

   Photo.java

 

Java代码 复制代码 收藏代码
  1. package com.zxf.domain;   
  2.   
  3.   
  4. /** 照片类--值类型 */  
  5. public class Photo {   
  6.     private String name;           //照片名   
  7.     private String filePath;       //照片存放路径   
  8.     private String description;    //描述   
  9.     private int width;             //原始宽度   
  10.     private int height;            //原始高度   
  11.        
  12.     public Photo(){}               //无参数的构造方法   
  13.   
  14.     //以下省略所有属性的getters和setters方法...   
  15.   
  16. }  
package com.zxf.domain;


/** 照片类--值类型 */
public class Photo {
	private String name;           //照片名
	private String filePath;       //照片存放路径
	private String description;    //描述
	private int width;             //原始宽度
	private int height;            //原始高度
	
	public Photo(){}               //无参数的构造方法

	//以下省略所有属性的getters和setters方法...

}

 

   Album.java

 

 

Java代码 复制代码 收藏代码
  1. package com.zxf.domain;   
  2.   
  3. import java.util.Date;   
  4. import java.util.List;   
  5.   
  6.   
  7. /** 相册持久化类(实体类) */  
  8. public class Album {   
  9.     private Long id;                 //对象标识符(OID)   
  10.     private String title;           //相册名   
  11.     private String description;    //描述   
  12.     private Date creationTime;     //建立时间   
  13.     private List<Photo> photos;    //照片集   
  14.        
  15.     public Album(){}                 //无参数的构造方法   
  16.   
  17.     //以下省略所有属性的getters和setters方法...   
  18. }  
package com.zxf.domain;

import java.util.Date;
import java.util.List;


/** 相册持久化类(实体类) */
public class Album {
	private Long id;                 //对象标识符(OID)
	private String title;           //相册名
	private String description;    //描述
	private Date creationTime;     //建立时间
	private List<Photo> photos;    //照片集
	
	public Album(){}                 //无参数的构造方法

	//以下省略所有属性的getters和setters方法...
}

 

   Album.hbm.xml

 

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.     <!-- 映射持久化类 -->  
  8.     <class name="com.zxf.domain.Album" table="album">  
  9.         <!-- 映射对象标识符 -->  
  10.         <id name="id"  column="id" type="long">  
  11.             <!-- 指定对象标识符生成器 -->  
  12.             <generator class="native" />  
  13.         </id>  
  14.         <!-- 用property映射每个普通属性 -->  
  15.         <property name="title"/>  
  16.         <property name="description"/>           
  17.         <property name="creationTime" column="creation_time"/>  
  18.            
  19.         <!-- 用bag来映射List集合属性 -->  
  20.         <bag name="photos" table="photo">  
  21.             <!-- key元素:指定集合属性对应的表的外键列 -->  
  22.             <key column="album_id" not-null="true" />  
  23.             <!-- composite-element元素:映射集合里的元素   
  24.                     class属性:指定集合里的元素的类类型   
  25.             -->  
  26.             <composite-element class="com.zxf.domain.Photo">  
  27.                 <!-- 用property映射每个普通属性 -->  
  28.                 <property name="name" />  
  29.                 <property name="filePath" column="file_path" />  
  30.                 <property name="description" />  
  31.                 <property name="width" />  
  32.                 <property name="height" />  
  33.             </composite-element>  
  34.         </bag>  
  35.     </class>  
  36. </hibernate-mapping>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<!-- 映射持久化类 -->
	<class name="com.zxf.domain.Album" table="album">
		<!-- 映射对象标识符 -->
		<id name="id"  column="id" type="long">
			<!-- 指定对象标识符生成器 -->
			<generator class="native" />
		</id>
		<!-- 用property映射每个普通属性 -->
		<property name="title"/>
		<property name="description"/>		
		<property name="creationTime" column="creation_time"/>
		
		<!-- 用bag来映射List集合属性 -->
		<bag name="photos" table="photo">
			<!-- key元素:指定集合属性对应的表的外键列 -->
			<key column="album_id" not-null="true" />
			<!-- composite-element元素:映射集合里的元素
			        class属性:指定集合里的元素的类类型
			-->
			<composite-element class="com.zxf.domain.Photo">
				<!-- 用property映射每个普通属性 -->
				<property name="name" />
				<property name="filePath" column="file_path" />
				<property name="description" />
				<property name="width" />
				<property name="height" />
			</composite-element>
		</bag>
	</class>
</hibernate-mapping>

 

   配置文件:hibernate.cfg.xml

 

 

Xml代码 复制代码 收藏代码
  1. <!DOCTYPE hibernate-configuration PUBLIC   
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"   
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.            
  8.         <!-- 数据库方言设置 -->  
  9.         <property name="hibernate.dialect">  
  10.             org.hibernate.dialect.MySQLInnoDBDialect   
  11.         </property>  
  12.            
  13.         <!-- 数据库连接参数设置 -->  
  14.         <property name="hibernate.connection.driver_class">  
  15.             com.mysql.jdbc.Driver   
  16.         </property>  
  17.         <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>  
  18.         <property name="hibernate.connection.username">root</property>  
  19.         <property name="hibernate.connection.password">123</property>  
  20.        
  21.         <!--实际操作数据库时是否显示SQL -->  
  22.         <!--   
  23.         <property name="hibernate.show_sql">true</property>-->  
  24.         <property name="hibernate.format_sql">true</property>  
  25.            
  26.            
  27.         <!--将数据库schema的DDL导出到数据库 -->  
  28.         <property name</
    分享到:
    评论

相关推荐

    spring MVC配置详解

    -- 可以自定义 servlet.xml 配置文件的位置和名称,默认为 WEB-INF 目录下,名称为[&lt;servlet-name&gt;]-servlet.xml,如 spring-servlet.xml --&gt; &lt;init-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; ...

    Hibernate组件映射代码详解

    主要介绍了Hibernate组件映射代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    hibernate 框架详解

    第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 - 关联映射 2.3.1. 映射...

    applicationContext.xml 详细配置

    在 Spring 框架中,Hibernate 是一个流行的对象关系映射(ORM)工具。通过 Hibernate,可以将 Java 对象映射到数据库表中。在本例中,使用了 Hibernate 3.x 版本: ``` &lt;bean id="hibernateInterceptor" class="org...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     11.2.1 用客户化映射类型取代Hibernate组件  11.2.2 用UserType映射枚举类型  11.2.3 实现CompositeUserType接口  11.2.4 运行本节范例程序  11.3 操纵Blob和Clob类型数据  11.4 小结  11.5 思考题 第12章 ...

    Hibernate 课件_配置文件详解

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

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

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

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    spring、Struts2、hibernate常见面试题

    * 使用 Hibernate 是因为 Hibernate 提供了一个易用的、高效率的对象关系映射框架,可以帮助开发者更好的处理数据持久化问题。 * 使用 Spring 是因为 Spring 基于 IoC 和 AOP 构架,可以帮助开发者更好的实现模块化...

    shh配置图解[归纳].pdf

    Hibernate是SSH配置的另一个核心组件,提供了ORM(Object-Relational Mapping)的功能,实现了Java对象和关系数据库的映射。Hibernate的配置包括下载Hibernate包、配置Hibernate的配置文件、定义映射关系等步骤。 ...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和...

    spring chm文档

    3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...

    Spring中文帮助文档

    为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPath...

Global site tag (gtag.js) - Google Analytics