和風(fēng)細(xì)雨

          世上本無(wú)難事,心以為難,斯乃真難。茍不存一難之見(jiàn)于心,則運(yùn)用之術(shù)自出。

          Hibernate的映射文件

          Hibernate的映射文件

          映射文件也稱映射文檔,用于向Hibernate提供關(guān)于將對(duì)象持久化到關(guān)系數(shù)據(jù)庫(kù)中的信息.
          持久化對(duì)象的映射定義可全部存儲(chǔ)在同一個(gè)映射文件中,也可將每個(gè)對(duì)象的映射定義存儲(chǔ)在獨(dú)立的文件中.后一種方法較好,因?yàn)閷⒋罅砍志没惖挠成涠x存儲(chǔ)在一個(gè)文件中比較麻煩,建議采用每個(gè)類一個(gè)文件的方法來(lái)組織映射文檔.使用多個(gè)映射文件還有一個(gè)優(yōu)點(diǎn):如果將所有映射定義都存儲(chǔ)到一個(gè)文件中,將難以調(diào)試和隔離特定類的映射定義錯(cuò)誤.
          映射文件的命名規(guī)則是,使用持久化類的類名,并使用擴(kuò)展名hbm.xml.
          映射文件需要在hibernate.cfg.xml中注冊(cè),最好與領(lǐng)域?qū)ο箢惙旁谕荒夸浿?這樣修改起來(lái)很方便.

          領(lǐng)域?qū)ο蠛皖?/strong>

          public class User{
            // ID
            private String id;
           
            // 名稱
            private String name;
           
            // 密碼
            private String password;
           
            // 郵件
            private String email;
           
            // 上次登錄時(shí)間
            private String lastLoginTime;
           
            // 上次登錄ip
            private String lastLoginIp;

            public User(String name,String password,String email){
              this.name=name;
              this.password=password;
              this.email=email;
            }
          }

          <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hibernate.auction">
            <class name="com.sitinspring.domain.User"
              table="USERTABLE_OKB" lazy="false">
              <id name="id" column="ID" >
                <generator class="uuid.hex"/>
              </id>
              <property name="name" column="name" />
              <property name="password" column="pswd" />
              <property name="email" column="email" />
              <property name="lastLoginTime" column="lastLoginTime" />
              <property name="lastLoginIp" column="lastLoginIp" />
            </class></hibernate-mapping>

          hibernate.cfg.xml中的映射文件設(shè)置

          <?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 name="java:comp/env/hibernate/SessionFactory">
              <!-- JNDI數(shù)據(jù)源設(shè)置 -->
              <property name="connection.datasource">
                java:comp/env/jdbc/myoracle
              </property>

              <!-- SQL方言,org.hibernate.dialect.OracleDialect適合所有Oracle數(shù)據(jù)庫(kù) -->
              <property name="dialect">
                org.hibernate.dialect.OracleDialect
              </property>

              <!-- 顯示SQL語(yǔ)句 -->
              <property name="show_sql">true</property>
             
              <!-- SQL語(yǔ)句整形 -->
              <property name="format_sql">true</property>
             
              <!-- 啟動(dòng)時(shí)創(chuàng)建表.這個(gè)選項(xiàng)在第一次啟動(dòng)程序時(shí)放開(kāi),以后切記關(guān)閉 -->
                  <!-- <property name="hbm2ddl.auto">create</property>  -->
                     
              <!-- 持久化類的映射文件 -->
              <mapping resource="com/sitinspring/domain/User.hbm.xml" />
              <mapping resource="com/sitinspring/domain/Privilege.hbm.xml" />
              <mapping resource="com/sitinspring/domain/Article.hbm.xml" />
              <mapping resource="com/sitinspring/domain/Record.hbm.xml" />
            </session-factory>
          </hibernate-configuration>

          映射文件物理位置示例

          映射文件的基本結(jié)構(gòu)

          映射定義以hibernate-mapping元素開(kāi)始, package屬性設(shè)置映射中非限定類名的默認(rèn)包.設(shè)置這個(gè)屬性后,對(duì)于映射文件中列出的其它持久化類,只需給出類名即可.要引用指定包外的持久化類,必須在映射文件中提供全限定類名.
          在hibernate-mapping標(biāo)簽之后是class標(biāo)簽.class標(biāo)簽開(kāi)始指定持久化類的映射定義.table屬性指定用于存儲(chǔ)對(duì)象狀態(tài)的關(guān)系表.class元素有很多屬性,下面將逐個(gè)介紹.

          ID

          Id元素描述了持久化類的主碼以及他們的值如何生成.每個(gè)持久化類必須有一個(gè)ID元素,它聲明了關(guān)系表的主碼.如右:
          Name屬性指定了持久化類中用于保存主碼值的屬性,該元素表明,User類中有一個(gè)名為id的屬性.如果主碼字段與對(duì)象屬性不同,則可以使用column屬性.

          <id name="id" column="ID" >
                  <generator class="uuid.hex"/>
          </id>


          生成器

          生成器創(chuàng)建持久化類的主碼值.Hibernate提供了多個(gè)生成器實(shí)現(xiàn),它們采用了不同的方法來(lái)創(chuàng)建主碼值.有的是自增長(zhǎng)式的,有點(diǎn)創(chuàng)建十六進(jìn)制字符串, 還可以讓外界生成并指定對(duì)象ID,另外還有一種Select生成器你那個(gè)從數(shù)據(jù)庫(kù)觸發(fā)器trigger檢索值來(lái)獲得主碼值.
          右邊使用了用一個(gè)128-bit的UUID算法生成字符串類型的標(biāo)識(shí)符, 這在一個(gè)網(wǎng)絡(luò)中是唯一的(使用了IP地址)。UUID被編碼為一個(gè)32位16進(jìn)制數(shù)字的字符串 .這對(duì)字段類型是字符串的id字段特別有效.UUID作為ID字段主鍵是非常合適的,比自動(dòng)生成的long類型id方式要好。

          UUID示例
          <id name="id" column="ID" >
                  <generator class="uuid.hex"/>
          </id>

           

          自動(dòng)增長(zhǎng)的id
          <id name="id" column="ID" type="long">
                    <generator class="native"/>
          </id>

          屬性

          在映射定義中,property元素與持久化對(duì)象的一個(gè)屬性對(duì)應(yīng),name表示對(duì)象的屬性名,column表示對(duì)應(yīng)表中的列(字段),type屬性指定了屬性的對(duì)象類型,如果type被忽略的話,Hibernate將使用運(yùn)行階段反射機(jī)制來(lái)判斷類型.

          <property name="name" column="name" />
          <property name="password" column="pswd" />
          <property name="email" column="email" />
          <property name="lastLoginTime" column="lastLoginTime" />
          <property name="lastLoginIp" column="lastLoginIp" />

          posted on 2008-04-30 16:43 和風(fēng)細(xì)雨 閱讀(6400) 評(píng)論(1)  編輯  收藏 所屬分類: Hibernate

          評(píng)論

          # re: Hibernate的映射文件 2009-09-14 13:15 asfas

          sdfaf  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 清原| 九台市| 平乡县| 临漳县| 抚顺市| 宁强县| 玉环县| 三亚市| 绥德县| 通化县| 乐业县| 绿春县| 军事| 上蔡县| 莎车县| 临漳县| 嘉善县| 象山县| 沁源县| 乌苏市| 陵川县| 准格尔旗| 肥西县| 石楼县| 湟源县| 叙永县| 泽库县| 宜阳县| 福鼎市| 青河县| 吉安市| 三都| 台山市| 油尖旺区| 苍溪县| 博湖县| 枣强县| 河源市| 安塞县| 彰化县| 抚宁县|