【HIbernate框架学习】:Hibernate组件映射
2016-12-17 22:19
274 查看
假设我们设计的User实体类和Employee实体类,两个实体类包含的一些信息是相同的,我们可以抽取出来单独
组成一个Component类,达到复用的目的,而且原来的类不再那么臃肿,看起来比较简单清晰明了。
我们来看简单的演示图例:
在Hibernate中Component映射采用<component>标签,元素包含的子元素是<property>元素,这里面放的
就是组件类的字段。
Component是某个实体的逻辑组成部分,它与实体类的主要差别在于,它没有oid,Component在DDD中成为
值类。采用Component的好处:实现对象模型的细粒度划分,复用率高,含义明确,层次分明。
简单实例代码:
Component实体类:
User实体类:
Employee实体类:
User实体类对象关系映射文件:
Employee实体类对象关系映射文件:
测试类:
testSave1()方法:
控制台输出:
数据库显示:
testLoad1()方法:
控制台显示:
组成一个Component类,达到复用的目的,而且原来的类不再那么臃肿,看起来比较简单清晰明了。
我们来看简单的演示图例:
在Hibernate中Component映射采用<component>标签,元素包含的子元素是<property>元素,这里面放的
就是组件类的字段。
Component是某个实体的逻辑组成部分,它与实体类的主要差别在于,它没有oid,Component在DDD中成为
值类。采用Component的好处:实现对象模型的细粒度划分,复用率高,含义明确,层次分明。
简单实例代码:
Component实体类:
package com.demo.domain; public class Contact { private String email; private String address; private String zipCode; private String contactTel; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } public String getContactTel() { return contactTel; } public void setContactTel(String contactTel) { this.contactTel = contactTel; } }
User实体类:
package com.demo.domain; public class User { private int id; private String name; private Contact userContact; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Contact getUserContact() { return userContact; } public void setUserContact(Contact userContact) { this.userContact = userContact; } }
Employee实体类:
package com.demo.domain; public class Employee { private int id; private String name; private Contact employeeContact; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Contact getEmployeeContact() { return employeeContact; } public void setEmployeeContact(Contact employeeContact) { this.employeeContact = employeeContact; } }
User实体类对象关系映射文件:
<?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.demo.domain.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <component name="userContact"> <property name="email"/> <property name="address"/> <property name="zipCode"/> <property name="contactTel"/> </component> </class> </hibernate-mapping>
Employee实体类对象关系映射文件:
<?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.demo.domain.Employee" table="t_employee"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <component name="employeeContact"> <property name="email"/> <property name="address"/> <property name="zipCode"/> <property name="contactTel"/> </component> </class> </hibernate-mapping>
测试类:
package com.demo.test; import org.hibernate.Session; import com.demo.domain.Contact; import com.demo.domain.HibernateUtils; import com.demo.domain.User; import junit.framework.TestCase; public class ComponentMappingTest extends TestCase { public void testSave1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); //建立User实体类 User user = new User(); user.setName("张三"); //建立Contact值类,值类通常从属于实体类 Contact userContact = new Contact(); userContact.setEmail("email"); userContact.setAddress("address"); userContact.setZipCode("zipCode"); userContact.setContactTel("contactTel"); user.setUserContact(userContact); session.save(user); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); User user = (User)session.load(User.class, 1); System.out.println(user.getName()); System.out.println(user.getUserContact().getAddress()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
testSave1()方法:
控制台输出:
数据库显示:
testLoad1()方法:
控制台显示:
相关文章推荐
- 学习笔记之 O/R 映射技术的王牌Hibernate框架
- 学习笔记之 O/R 映射技术的王牌Hibernate框架
- 码农小汪-Hibernate学习7-hibernate映射组件属性
- hibernate3.3.2学习笔记 --- 组件映射
- Java的Hibernate框架中的组合映射学习教程
- 【Hibernate框架开发之六】Annotation关系映射&组件映射!
- SSH:Hibernate框架(Hibernate查询排序和组件映射)
- Hibernate框架学习(三) 关系映射
- Hibernate框架学习之三:深入映射文件的配置
- Hibernate框架学习(三) 关系映射
- Hibernate框架学习(三) 关系映射
- Hibernate学习(4)框架核心组件
- 一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一)
- 框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结
- 框架学习之Hibernate 第七节 继承映射
- Hibernate学习_011_组件映射
- Hibernate框架学习(三) 关系映射
- Hibernate学习笔记(五)映射组件属性
- Hibernate学习笔记----组件映射
- Java的Hibernate框架中的继承映射学习教程