zoukankan      html  css  js  c++  java
  • Hibernate4.x之映射文件

    POJO类和数据库的映射文件*.hbm.xml
      POJO类和关系数据库之间的映射可以用一个XML文档来定义
      通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据库表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系
      在运行时Hibernate将根据这个映射文件来生成各种SQL语句
      映射文件的扩展名为.hbm.xml

    映射文件说明
      hibernate-mapping
      -类层次:class
        主键:id
        基本类型:property
        实体引用类:many-to-one | one-to-one
        集合:set | list | map | array
        - one-to-many
        - many-to-many
        子类:subclass | joined-subclass
        其它:component | any等
      -查询语句:query(用来放置查询语句,便于对数据库查询的统一管理和优化)


    每个Hibernate-mapping中可以同时定义多个类。但更为推荐为每个类都创建一个单独的映射文件


    映射对象标识符

      Hibernate使用对象标识符(OID)来建立内存中的对象和数据库表中记录的对应关系。对象的OID和数据表的主键对应。Hibernate通过标识符生成器来为主键赋值
      Hibernate推荐在数据表中使用代理主键,即不具备业务含义的字段。代理主键通常为整数类型,因为整数类型比字符串类型要节省更多的数据库空间
      在对象-关系映射文件中,<id>元素用来设置对象标识符。<generator>子元素用来设定标示符生成器
      Hibernate提供了标识符生成器接口:IdentifierGenerator,并提供了各种内置实现

    主键生成策略generator
    Hibernate提供的内置标识符生成器
    ---------------------------------------------------------------------------------------------

    increment:适用于代理主键,有Hibernate自动以递增的方式生成
    identity:适用于代理主键,有底层数据库生成标识符
    sequence:适用于代理主键,Hibernate根据底层数据库的序列生成标识符,这要求数据库支持序列
    hilo:适用于代理主键,Hibernate分局high/low算法生成标识符
    seqhilo:适用于代理主键,使用一个高/低位算法来高效的生成long,short或int类型的标识符
    native:适用于代理主键,根据底层数据库对自动生成标识符的方法,自动选择identity、sequence或hilo
    uuid-hex:适用于代理主键,Hibernate采用采用120为的UUID算法生成标识符
    uuid-string:适用于代理主键,UUID被编码成一个16字符长的字符串
    assigned:适用于自然主键,由Java应用程序负责生成标识符
    foreign:适用于代理主键,使用另外一个相关联的对象的标识符
    ---------------------------------------------------------------------------------------------
    increment标识符生成器
      increment标识符生成器由Hibernate以递增的方式为代理主键赋值
      Hibernate会先读取NEWS表中的主键的最大值,而接下来向NEWS表中插入记录时,就在max(id)的基础上递增,增量为1
      

      适用范围:
        由于increment生成标识符机制不依赖与底层数据库系统,因此它适用于所有的数据库系统
        适用于只有单个Hibernate应用进程访问同一个数据库的场合,在集群环境下不推荐使用它
        OID必须为long、int或short类型,如果把OID定位byte类型,在运行时会抛出异常

    identity标识符生成器
      identity标示符生成器有底层数据库来负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型
      

      适用范围:
        由于identity生成标识符的机制依赖于底层数据库系统,因此,要求底层数据库系统必须支持自动增加字段类型。支持自动增长字段类型的数据库包括:DB2、MySQL、MS SQL SERVER、Sybase等
        OID必须为long、int或short类型,如果把OID定位byte类型,在运行时会抛出异常

    sequence标识符生成器
      sequence标识符生成器利用底层数据库提供的序列来生成标识符
      

    1 <id name="id">
    2     <generator class="sequence">
    3         <param name="sequence">news_seq</param>
    4     </generator>
    5 </id>    


      Hibernate在持久化一个News对象时,先从底层数据库的news_seq序列中获得一个唯一的标识号,再把它作为主键值
      适用范围:
        由于sequence生成标识符的机制依赖于底层数据库的序列,因此,要求底层数据库必须支持序列,支持序列的数据库包括:DB2、Oracle等
        OID必须为long、int或short类型,如果把OID定义为byte类型,在运行时会抛出异常

    hilo标识符生成器
    hilo标识符生成器由Hibernate按照一种high/low算法生成标识符,它从数据库的特定表的字段获取中high值

    1 <id name="id">
    2     <generator class="hilo">
    3         <param name="table">HI_TABLE</param>
    4     <param name="column">NEXT_VALUE</param>
    5     <param name="max_lo">10</param>
    6     </generator>
    7 </id>


      Hibernate在持久化一个News对象时,有Hibernate负责生成主键值。hilo标识符生成器在生成标识符时,需要读取并修改HI_TABLE表中的NEXT_VALUE值
      适用范围:
        由于hilo生成标识符机制不依赖与底层数据库系统,因此它适合所有的数据库系统
        OID必须为long、int或short类型,如果把OID定义为byte类型,在运行时会抛出异常

    native标识符生成器
      native标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择使用identity、sequence或hilo标识符生成器
      适用范围:
        由于native能根据底层数据库系统的类型,自动选择合适的标识符生成器,因此很适合于跨数据库平台开发
        OID必须为long、int或short类型,如果把OID定义为byte类型,在运行时会抛出异常

    -----------------------------------
    Java时间和日期类型的Hibernate映射
    在Java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar。此外,在JDBC API中还提供了3个扩展了java.sql.Date,java.sql.Time,和java.sql.TimeStamp,这三个类非别和标准SQL类型中的DATE,TIME和TIMESTAMP类型对应
    在标准SQL中,DATE类型表示日期,TIME类型表示时间,TIMESTAMP类型表示时间戳,同时包含日期和时间信息

    -------------------------------------------------------------------------
    映射类型 Java类型 标准SQL类型 描述
    date java.util.Date或java.sql.Date DATE 代表日期yyyy-MM-dd
    time java.util.Date或java.sql.Time TIME 代表时间 hh:mm:ss
    timestamp java.util.Date或java.sql.Timestamp TIMESTAMP 代表时间和日期 yyyy-MM-dd hh:mm:ss
    calendar java.util.Calendar TIMESTAMP 代表时间和日期 yyyy-MM-dd hh:mm:ss
    calendar_date java.util.Calendar DATE 代表日期yyyy-MM-dd
    -------------------------------------------------------------------------

  • 相关阅读:
    Django cache (缓存)
    Django CSRF
    Django 中的 Cookie 和 Session
    Django views 中的装饰器
    Ajax 基础
    JavaScript 对象
    Django ORM 操作
    Django 视图
    Django 路由系统
    Django 模版语言
  • 原文地址:https://www.cnblogs.com/dreamfree/p/4122116.html
Copyright © 2011-2022 走看看