首页 > 代码库 > 组件映射

组件映射

组件映射关键字componet

建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目表之间的外键参照关系。以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息单独放在一张表中,然后建立员工信息表和地址信息表之间的外键参照关系,当每次查询员工信息时,都需建立者两个表的连接。建立表的连接是很耗时的操作,为了提高数据库运行性能,可以把这两张表的信息整合在一张员工信息表EMPINFO中。

 

 

 

技术分享

步骤一:创建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===");

     }

 

组件映射