Hibernate组件映射

来源:互联网 发布:Ubuntu命令行改中文 编辑:程序博客网 时间:2024/05/16 05:49

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

public class EmpInfo {    private Integer eid;    private String ename;    private EmpHomeAddress ehome;    public Integer getEid() {        return eid;    }    public void setEid(Integer eid) {        this.eid = eid;    }    public String getEname() {        return ename;    }    public void setEname(String ename) {        this.ename = ename;    }    public EmpHomeAddress getEhome() {        return ehome;    }    public void setEhome(EmpHomeAddress ehome) {        this.ehome = ehome;    }}
public class EmpHomeAddress {    private String ehomestreet;    private String ehomecity;    private String ehomeprovince;    private String ehomezipcode;    private EmpInfo empinfo;    public String getEhomestreet() {        return ehomestreet;    }    public void setEhomestreet(String ehomestreet) {        this.ehomestreet = ehomestreet;    }    public String getEhomecity() {        return ehomecity;    }    public void setEhomecity(String ehomecity) {        this.ehomecity = ehomecity;    }    public String getEhomeprovince() {        return ehomeprovince;    }    public void setEhomeprovince(String ehomeprovince) {        this.ehomeprovince = ehomeprovince;    }    public String getEhomezipcode() {        return ehomezipcode;    }    public void setEhomezipcode(String ehomezipcode) {        this.ehomezipcode = ehomezipcode;    }    public EmpInfo getEmpinfo() {        return empinfo;    }    public void setEmpinfo(EmpInfo empinfo) {        this.empinfo = empinfo;    }}

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.entity"><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>

hibernate.cfg.xml大配置文件:

<hibernate-configuration>    <session-factory>        <!-- Database connection settings 数据库连接设置-->        <!-- 驱动类 -->        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>        <!-- url地址 -->        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>        <property name="connection.username">system</property>        <property name="connection.password">1</property>        <!-- SQL dialect  (SQL 方言) -->        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>        <!-- Echo all executed SQL to stdout 在控制台打印后台的SQL语句 -->        <property name="show_sql">true</property>        <!-- 格式化显示SQL -->        <property name="format_sql">true</property>        <!-- Drop and re-create the database schema on startup -->          <property name="hbm2ddl.auto">update</property>           <!-- 支持getCurrentSession方法 -->         <!--  <property name="current_session_context_class">thread</property> -->              <!-- 关联小配置 -->         <mapping resource="cn/entity/EmpInfo.hbm.xml" />    </session-factory></hibernate-configuration>

测试类:

public class Tests {    Session session;    Transaction tx;    @Before    public void initDate(){        session = HibernateUtil.getSession();         tx= session.beginTransaction();    }    @After     public void afterTest(){         tx.commit();         HibernateUtil.closeSession();     }    /**     * 组件的映射测试     */    @Test    public void getTest(){        //创建一个员工对象        EmpInfo emp=new EmpInfo();        emp.setEname("火狐1");        //创建一个员工地址对象        EmpHomeAddress address=new EmpHomeAddress();        address.setEhomecity("北京");        address.setEhomeprovince("北京");        address.setEhomestreet("五道口");        address.setEhomezipcode("100000");        address.setEmpinfo(emp);        emp.setEhome(address);        session.save(emp);        System.out.println("ok");    }    /**     * 查询     */    @Test    public void selectTest(){        EmpInfo emp=(EmpInfo)session.load(EmpInfo.class, 1);        System.out.println(emp.getEname());    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 异地违章罚单丢了怎么办 异地现场违章罚单丢了怎么办 新车没有牌照过停车杆怎么办 驾照换证时间过了怎么办 杭州告知单丢了怎么办 电工证过了复审日期怎么办 大人有居住证小孩没有怎么办 异地补办身份证没有暂住证怎么办 挂科了心里难受怎么办 c1升b2考不过怎么办 b2驾照扣了1分怎么办 红绿色盲驾考怎么办 驾驶证忘带被交警查了怎么办 车子被扣45分怎么办 驾照被扣在外省交警支队怎么办 从渭南把驾照转到西安怎么办 a1a2驾驶证扣3分怎么办 车辆累计扣12分怎么办 驾照扣了40分怎么办 驾驶证扣了30分怎么办 b2驾照逾期未审怎么办 c1实习期扣6分怎么办 车子累计扣30分怎么办 实习期间扣满12分怎么办 新手驾照扣6分怎么办 a2驾驶证逾期未审验怎么办 c1驾照扣了6分怎么办 b1驾照被扣12分怎么办 b2驾驶本扣分了怎么办 驾驶本扣9分后怎么办 b1照扣12分怎么办 b2扣了15分怎么办 b2有扣分未年审怎么办 b2驾驶证扣4分怎么办 b2驾驶证扣10分怎么办 刚发驾驶证照片太丑想换怎么办! 考驾照时户口变更怎么办 驾照年审色盲未过怎么办 考驾驶证互联网注册号码怎么办 驾驶证体检视力不过关怎么办 六年驾照满了怎么办