zoukankan      html  css  js  c++  java
  • hibernate的映射之一(多对一单向关联)

    hibernate的多对一映射

    多对一应用相当的广泛:

    例如:

    从订单的角度来说多个订单可以对应一个消费者

    从收货的地址来说多个收货地址可以对应一个收货人等。

    下面就以员工和部门为例子。多个员工可以隶属于同一个部门。

    Emp中定义一个Dept属性,而在Dept类中无须定义存放Emp对象的集合属性。

    1.准备JavaBean

      部门实体类

    public class Dept {
    private Integer deptid; //部门编号
    private String deptname; //部门名称

    public Integer getDeptid() {
    return deptid;
    }

    public void setDeptid(Integer deptid) {
    this.deptid = deptid;
    }

    public String getDeptname() {
    return deptname;
    }

    public void setDeptname(String deptname) {
    this.deptname = deptname;
    }
    }



    员工实体类:员工实体中需要植入一个部门实体。 原因:多个员工可以隶属于同一个部门。
    public class Emp {
    private Integer empno; //员工编号
    private String ename; //员工名称
    //植入一个部门实体
    private Dept dept=new Dept();

    public Dept getDept() {
    return dept;
    }
    public void setDept(Dept dept) {
    this.dept = dept;
    }

    public Integer getEmpno() {
    return empno;
    }
    public void setEmpno(Integer empno) {
    this.empno = empno;
    }

    public String getEname() {
    return ename;
    }
    public void setEname(String ename) {
    this.ename = ename;
    }
    }


    2.准备持久化类的映射文件

    部门一方

    准备Dept.hbm.xml文件

    <?xml version="1.0"?>
    <!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.day04mapping.manytoone.entity">
    <!--表名称 schema:操作数据库的用户名-->
    <class name="Dept" table="DEPT" schema="root">
    <!--列名-->
    <id name="deptid" column="DEPTID">
    <!--主键生成的策略 native:自动生成主键字段-->
    <generator class="native"></generator>
    </id>
    <property name="deptname" column="DEPTNAME"></property>
    </class>
    </hibernate-mapping>

    员工一方

    准备Emp.hbm.xml文件
    <?xml version="1.0"?>
    <!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.day04mapping.manytoone.entity">
    <!--name:表名称 schema 操作数据库的用户名-->
    <class name="Emp" table="EMP" schema="root">
    <!--列名-->
    <id name="empno" column="EMPNO">
    <!--主键生成的策略 native:自动生成主键字段-->
    <generator class="native"></generator>
    </id>
    <property name="ename" column="ENAME"></property>
    <!--多对一 单向关联
    员工是多的一方
    name:Emp中植入一方的属性名称
    column;数据库中外键列的值
    class:植入一方的属性的类型
    -->
    <many-to-one name="dept" column="deptno" class="Dept"></many-to-one>
    </class>
    </hibernate-mapping>



    3.准备hibernate.cfg.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
    <!-- 指定数据库所用到的驱动 -->
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <!-- 指定数据库链接的url,hibernate链接的数据库名 -->
    <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
    <!-- 指定连接数据库的用户名 -->
    <property name="connection.username">root</property>
    <!-- 指定连接数据库的用户口令 -->
    <property name="connection.password">root</property>
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>

    <!--格式化sql -->
    <property name="format_sql ">true</property>
    <!-- 打印sql 控制台-->
    <property name="show_sql">true</property>
    <!-- 指定数据库方言 -->
    <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
    <!-- 根据需要自动创建数据库表 -->
    <property name="hbm2ddl.auto">update</property>

    <!--关联小配置文件-->
    <!--多对一-->
    <mapping resource="cn/day04mapping/manytoone/entity/Dept.hbm.xml"></mapping>
    <mapping resource="cn/day04mapping/manytoone/entity/Emp.hbm.xml"></mapping>

    </session-factory>
    </hibernate-configuration>


    4.书写测试类

    根据员工的编号查询该员工对应的部门。

    //多对一单向关联
    @Test
    public void test01(){
    //读取大配置文件
    Configuration cfg=new Configuration().configure();
    //session工厂
    SessionFactory factory=cfg.buildSessionFactory();
    //session对象
    Session session = factory.openSession();
    //提供一个员工编号
    Emp emp = session.get(Emp.class, 1);
    System.out.println(emp.getEname());
    //隶属的部门
    System.out.println(emp.getDept().getDeptname());
    }



     
  • 相关阅读:
    JaveScript简单数据类型(JS知识点归纳二)
    JaveScript变量的简介及其变量的简单使用(JS知识点归纳一)
    JaveScript用二分法与普通遍历(冒泡)
    include、include_once、require、require_once其区别
    POST和GET有什么区别?
    前端向后台发送请求有几种方式?
    jQuery的$.ajax方法响应数据类型有哪几种?本质上原生ajax响应数据格式有哪几种,分别对应哪个属性?
    java根据汉字生成首字母大写
    springboot+使用切面AOP动态获取自定义注解
    JavaScript基础05——严格模式
  • 原文地址:https://www.cnblogs.com/sujulin/p/8135486.html
Copyright © 2011-2022 走看看