Component映射
来源:互联网 发布:重新加载js不刷新页面 编辑:程序博客网 时间:2024/05/19 04:07
Component映射也叫组件映射
出现原因:
如有两个对象模型:
public class User {
private int id;
private String name;
private String email;
private String address;
private String zipCode;
private String contactTel;
}
public class Employee {
private int id;
private String name;
private String email;
private String address;
private String zipCode;
private String contactTel;
从对象模型来看有些东西就重复了,如红色部分的联系信息,对象模型中粒度细一点比较好,复用率就高一些,所以把那些联系信息单独拿出来,如下:
public class Contact {
private String email;
private String address;
private String zipCode;
private String contactTel;//他作为了实体类的一部分
}
User变为:
public class User {
private int id;
private String name;
private Contact userContact;
}
Employee变为:
public class Employee {
private int id;
private String name;
private Contact employeeContact;
}
原理图:
具体映射如下:
User.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.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.hbm.xml
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Employee" table="t_emplyee">
<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>
测试如下:
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);
}
}
}
Component是某个实体的逻辑组成部分,它与实体类的主要差别在于,它没有oid
Component在DDD中称为值类
采用Component的好处:实现对象模型的细粒度划分,复用率高,含义明确,层次分明
对象模型与关系模型的设计恰恰相反,对象模型一般是细粒度的,关系模型一般是粗粒度的
- Component映射
- component的集合映射
- 组件(Component)映射
- 15. component映射
- hibernate XML component 映射
- 4.Component映射:测试
- 5.Component映射:总结
- 组件(Component)映射
- Hibernate之component映射
- Hibernate中component映射
- 【Hibernate】Component映射
- 组件(Component)映射
- Hibernate入门10 - Component 映射
- 入門 10 - Component 映射
- Hibernate入门10 - Component 映射
- 入門 10 - Component 映射
- Hibernate入门之Component 映射
- 1.Component映射:Object,hbm
- malloc创建多为数组
- 滑动屏幕效果GestureDetector、OnGestureListener、ViewFlipper
- VB MSFlexGrid控件的几种使用方法
- MAC IP TCP UDP ARP ICMP报文格式
- 【Android笔记 四 】使用android 调用震动的例子
- Component映射
- Observer模式
- dbus那天报的错误
- VB中对EXCEL的各种操作
- Linux进程相关命令
- Windows编程知识要点总结3(1)句柄
- VB清空窗体内所有文本框(其他控件同理)
- ansys 12.0和12.0安装说明
- HDU 3053 Group Travel