• Hibernate--hibernate.hbm.xml详解


      hibernate.hbm.xml是hibernate框架的映射关系的文件,使用.hbm.xml为后缀实际没有多大意义,只是一种规范。    例:

      

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2015-10-28 11:14:01 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping package="org.entity.joined_subclass">
      <!--class 映射哪个类到哪个表--> <class name="Person" table="PERSONS" > <id name="id" type="java.lang.Integer"> <column name="PERSON_ID" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="PERSON_NAME" /> </property> <property name="age" type="java.lang.Integer"> <column name="PERSON_AGE" /> </property> <union-subclass name="Student" table="STUDENTS"> <property name="school" column="SCHOOL" type="string"></property> </union-subclass> </class> </hibernate-mapping>

      1.class节点

      <class name="Person" table="PERSONS" >
      name对应的是哪个类,table对应是数据库的表,dynamic-update:默认为false 设置为true时表示进行更新操作时只更新那些修改了的属性
     2.id节点 表的主键
      <generator class="native" />主键生成策略
          class="native":由hibernate自己判断采用identity,sequence,hilo方式去生成主键,最常用适合全部数据库

          class="assigned": java程序必须提供值
          class="sequence":使用oracle数据库,利用数据库的自增特性
          class="increment":有hibernate生成主键,每次去表里查最后一个主键的值,然后+1
          class="identity":利用数据库的自增特性 使用sql server,mysql
          class="hilo":由hibernate去帮你生成主键,采用高低算法 (适合全部数据库) 
      3.property节点:
        name:属性名   column:表里的字段名    index:锁引名  
        unique:是否唯一  update:是否可更新  type:类型  length:字段长度
      4.时期,时间的属性和字段映射
        类里的属性使用java.util.date类型映射时:
                            要日期:指定type为date
                            要时间:指定type为time
                            要日期和和时间:指定type为timestamp
      5.组建映射
        一个类,是另一个类的属性,但两个类,是一张表
    <component name="address" class="Address">
        <property name="province" column="Province" type="string"></property>
        <property name="city" column="City" type="string"></property>
        <property name="area" column="Area" type="string"></property>
    </component>

      6.一对多映射  

        最常见,两个表,对应两个类,表与表之间一对多关系。

         例如:一个user可以有多个order

    //用户类
    public class User {
         private int customerId;
         private String customerName;
    }
    //订单类  
    public class Orders {
        private int orderId;
        private String orderName;
        private Customer customer;
    }
    //一对多映射
    <many-to-one name="user" class="User">
      <!--指定外键列-->
      <column name="customer_id" />
    </many-to-one>

      7.  双向一对多  最常用

        代码表示:

    //在多的一方
    public
    class Orders { private int orderId; private String orderName; private Customer customer; }
    //在一得一方,添加一个含多的一方的集合,可以是set或者list
    public class Customer { private int customerId; private String customerName; private List<Orders> orders=new ArrayList<Orders>(); }
    //在多的一方
    <many-to-one name="customer" class="Customer">
      <!--指定外键列-->
      <column name="customer_id" />
    </many-to-one>
    //在一的映射文件里,set用set标签,list用bag标签
         <!-- 1对多的双向映射 -->
    <bag name="orders" table="orders">
      //指定外键表的外键列名
      <key colum="customer_id" />
      //指定list集合里的对象类型
      <one-to-many class="Orders"/>
    </bag>
      //set和bag的常用属性:
               //inverse="true":在双向一对多的映射中,集合这端,默认是双向维护关联,这样会引起效率问题, 一般在集合这端,加入此属性,放弃维护,让多的那端主动维护
               //
    cascade="delete"设置允许级联删除 ,常常不用。一般在程序去做判断
               //order-by 对集合的结果排序
                //order-by="字段名 asc"
     

        8.多对多映射

        

    两个表的多对多关系,通过第3张中间表来实现
    在hibernate中,只需写好 多 vs 多的映射关系,会自动帮我们生成中间表

    多对多,集合属性的映射:

    <!-- 多对多映射集合 -->
    <!-- table -> 中间表名字 -->
    <bag name="courses" table="STUDENT_COURSE">
    <!-- 指定本类,在中间表中的外键名称 -->
    <key>
    <column name="STU_ID"></column>
    </key>
    <!-- 本类的集合属性,对应的类,在中间表中,外键的名字 -->
    <many-to-many class="Course" column="C_ID"></many-to-many>
    </bag>

    另外的类,写法真好互补

    <bag name="students" table="STUDENT_COURSE">
    <key>
    <column name="C_ID"></column>
    </key>

    <many-to-many class="Student" column="STU_ID"></many-to-many>
    </bag>

        

         






      

  • 相关阅读:
    hive基本操作与应用
    用mapreduce 处理气象数据集
    熟悉常用的HBase操作,编写MapReduce作业
    爬虫大作业
    第三章 熟悉常用的HDFS操作
    数据结构化与保存
    获取全部校园新闻
    爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离
    网络爬虫基础练习
    Hadoop综合大作业
  • 原文地址:https://www.cnblogs.com/zDr-zHy/p/4918587.html
Copyright © 2020-2023  润新知