`

hibernate学习10之component(组件)映射

阅读更多
在hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid,
component可以成为是值对象(DDD)

采用component映射的好处:它实现了对象模型的细粒度划分,层次会更分明,复用率会更高

<!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.connection.url">jdbc:mysql://localhost/hibernate_component_mapping</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">bjsxt</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.show_sql">true</property>
		
		<mapping resource="com/bjsxt/hibernate/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

public class User {	
	private int id;	
	private String name;
	private Contact contact; 
	//setter,getter
}
public class Contact {
	private String email;
	private String address;
	private String zipCode;
	private String contactTel;
	//setter,getter
}


利用下面的配置就可以实现组件映射,它可以增加代码复用率,假定现在还有一个类也有email,address,zipCode,contactTel这些属性,那就可以使用Contact 类来减少setter&getter,实现代码复用。
User.hbm.xml
<?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>
	<class name="com.bjsxt.hibernate.User" table="t_user">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<component name="contact">
			<property name="email"/>
			<property name="address"/>
			<property name="zipCode"/>
			<property name="contactTel"/>
		</component>
	</class>
</hibernate-mapping>

测试一下:
import org.hibernate.Session;

import junit.framework.TestCase;

public class ComponentMappingTest extends TestCase {

	public void testSave1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			User user = new User();
			user.setName("张三");
			
			Contact contact = new Contact();
			contact.setAddress("xxxxx");
			contact.setEmail("xxx@rrr.com");
			contact.setZipCode("1111111");
			contact.setContactTel("9999999999");
			
			user.setContact(contact);
			
			session.save(user);
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}		
}
分享到:
评论

相关推荐

    Hibernate教程09_关系映射之组件映射

    在" Hibernate教程09_关系映射之组件映射 "的配套源码`s2sh_relation06_component`中,你可能会看到如何实际应用这些概念的例子。源码可能包含了`Employee`、`Address`以及其他相关类,以及对应的配置文件,如`...

    hibernate组件映射

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地...理解和熟练运用组件映射,能显著提高开发效率,优化应用性能,是每个Hibernate开发者必须掌握的核心技能之一。

    component(组件映射)

    在Java开发领域,尤其是使用Spring或Hibernate框架时,“Component(组件映射)”是一个重要的概念。Component映射是Hibernate提供的一种机制,它允许我们将多个相关的简单属性或者对象封装到一个复合对象中,以此来...

    Hibernate组件映射(annotation/xml)

    《Hibernate组件映射:Annotation与XML的融合》 在Java持久化领域,Hibernate是一个不可或缺的框架,它提供了强大的对象关系映射(ORM)能力。本文将深入探讨Hibernate中的组件映射,包括使用注解(Annotation)和...

    Hibernate组件映射代码详解

    "Hibernate组件映射代码详解" titre的知识点: * Hibernate组件映射代码的概念和实现 * 组件关联映射的属性和特点 * Hibernate组件映射的优点和应用场景 描述的知识点: * Hibernate组件映射代码的详细解释 *...

    11 映射-- 组件映射(人类与姓名类)

    在IT行业中,组件映射是软件开发中的一个重要概念,特别是在对象关系映射(ORM)框架中,如Hibernate。本文将详细解析"11 映射-- 组件映射(人类与姓名类)"这一主题,结合标签"源码"和"工具",探讨如何在Hibernate中...

    hibernate组件之间的关联

    **组件映射(Component Mapping)** 组件映射允许将一个类的属性作为另一个类的一部分,类似于 Java 中的嵌套类。使用 @Component 或 @Embeddable 注解来标记可嵌入的组件类,然后在父类中使用 @Embedded 或 @...

    对Hibernate配置文件中的映射元素详解

    此外,Hibernate还支持组件映射,通过`component`元素,可以将对象的内部结构映射到单独的数据库表或表的一部分。组件可以包含属性、其他组件甚至集合。`component`元素的`name`属性指定了属性名,`class`属性是组件...

    Hibernate配置文件中映射元素详解

    组件映射允许将一个对象的属性组合成另一个对象,`&lt;component&gt;`元素定义了子对象与父对象表字段的映射。它支持`name`(属性名)、`class`(子对象类名)、`insert`、`update`和`access`属性。 ```xml &lt;component ...

    Hibernate_test

    `hb_02_component`和`hb_03_componentOid`、`hb_03_componentCollection`则涉及到了Hibernate的组件映射(Component Mapping)和复合主键(Composite Key)。组件映射允许将一个类的属性组合成另一个类的一部分,而...

    hibernate复杂关系的映射

    这种复杂的映射关系展示了Hibernate的强大之处,它可以处理一对多、多对一、多对多等各种复杂关系,并且能够将对象的复杂结构(如组件和嵌套对象)映射到关系数据库中。通过这种方式,开发人员可以专注于业务逻辑,...

    hibernate源码下载

    `hibernate_component_mapping`文件可能讨论了Hibernate的组件映射。组件是一组相关的属性,它们可以作为一个整体被映射到数据库的一个或多个字段上。组件映射提供了一种有效的方式,将复杂对象分解为更小的部分,...

    Hibernate_code

    5. **Hibernate_Component**:这部分可能包含了Hibernate组件映射的示例。组件是对象的一部分,可以被嵌入到其他对象中,类似于数据库中的复合类型。通过@Component或@Embeddable注解,可以将一个类声明为组件,并在...

    Hibernate学习笔记_songjignhao_1

    总的来说,这篇 Hibernate 学习笔记涵盖了关联关系的多种类型和映射方法,以及查询排序、组件映射和继承映射等核心概念,为理解并熟练运用 Hibernate 提供了坚实的基础。通过实际编码和理解这些示例,开发者可以更...

    hibernate学习笔记

    - **组件component映射**:将实体类中的复杂属性作为一个组件映射到表中。 - **复合(联合)主键映射**:使用多个字段作为主键。 - **集合(collection)映射**:将实体类中的集合属性映射到数据库表中。 --- #...

Global site tag (gtag.js) - Google Analytics