组件映射
Posted 杨荣林
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组件映射相关的知识,希望对你有一定的参考价值。
建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系。
以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息单独放在一张表中,
然后建立员工信息表和地址信息表之间的外键参照关系,当每次查询员工信息时,都需建立者两个表的连接。
建立表的连接是很耗时的操作,为了提高数据库运行性能,可以把这两张表的信息整合在一张员工信息表EMPINFO中。
图为:EMPLNFO表结构
Empinfo类和EmpHomeAddress类的整体和部分的关系
步骤一:创建EmpHomeAddress和EmpInfo
public class EmpHomeAddress {
private String ehomestreet;
private String ehomecity;
private String ehomeprovince;
private String ehomezipcode;
private EmpInfo empinfo;
}
EmpInfo创建如下:
public class EmpInfo {
private Integer eid;
private String ename;
private EmpHomeAddress ehome;
}
步骤二:创建配置文件EmpInfo.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.happy.component"> <class name="EmpInfo" table="EMPINFO"> <id name="eid" column="EID"> <generator class="native"></generator> </id> <property name="ename" column="ENAME" type="string"></property> <component name="ehome" class="EmpHomeAddress"> <parent name="empinfo"/> <property name="ehomestreet" column="EHOMESTREET" type="string"></property> <property name="ehomecity" column="EHOMECITY" type="string"></property> <property name="ehomeprovince" column="EHOMEPROVINCE" type="string"></property> <property name="ehomezipcode" column="EHOMEZIPCODE" type="string"></property> </component> </class> </hibernate-mapping>
步骤三:书写测试类
@Test public void testAdd(){ Session session = HibernateUtil.getSession(); Transaction tx=session.beginTransaction(); //创建一个员工对象 EmpInfo emp=new EmpInfo(); emp.setEname("元芳"); //创建一个员工地址对象 EmpHomeAddress address=new EmpHomeAddress(); address.setEhomecity("上海"); address.setEhomeprovince("上海"); address.setEhomestreet("浦东区"); address.setEhomezipcode("100000"); address.setEmpinfo(emp); emp.setEhome(address); session.save(emp); tx.commit(); System.out.println("ok!!!"); }
以上是关于组件映射的主要内容,如果未能解决你的问题,请参考以下文章