组件映射

Posted 杨荣林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组件映射相关的知识,希望对你有一定的参考价值。

建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系。

以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息单独放在一张表中,

然后建立员工信息表和地址信息表之间的外键参照关系,当每次查询员工信息时,都需建立者两个表的连接。

建立表的连接是很耗时的操作,为了提高数据库运行性能,可以把这两张表的信息整合在一张员工信息表EMPINFO中。

图为:EMPLNFO表结构

         Empinfo类和EmpHomeAddress类的整体和部分的关系

步骤一:创建EmpHomeAddressEmpInfo

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!!!");
	  }

  

 

以上是关于组件映射的主要内容,如果未能解决你的问题,请参考以下文章

VsCode 代码片段-提升研发效率

片段着色器中的球面映射

EntityFramework 映射片段问题

在活动映射 xml 中膨胀类片段时出错

添加新实体标量时实体框架 4 映射片段错误

错误3004:从行开始映射片段时出现问题