zoukankan      html  css  js  c++  java
  • 组件映射

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

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

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

    建立表的连接是很耗时的操作,为了提高数据库运行性能,可以把这两张表的信息整合在一张员工信息表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!!!");
    	  }
    

      

  • 相关阅读:
    C# 线程手册 第三章 使用线程 .NET 对同步的支持
    C# 线程手册 第三章 使用线程
    C# 线程手册 第三章 使用线程 .NET 同步策略
    C# 线程手册 第三章 使用线程 AutoResetEvent, Mutex & Interlocked
    ALinq 使用教程(七)ALinq 的扩展
    ALinq 使用教程(三)数据的增、删、改
    免费好用的 NHibernate 可视化实体代码生成器 -- Visual Entity 1.1 支持 NHibernate 了
    ALinq 使用教程(五)使用 Xml 映射文件
    致力于打造最好用的 NHibernate 设计器--Visual Entity 1.4.4发布
    将 Linq to SQl 程序转为 Linq to Access
  • 原文地址:https://www.cnblogs.com/yangronglin/p/5842662.html
Copyright © 2011-2022 走看看