☆藍色夢想☆

          世界總是反反覆覆錯錯落落地飄去 來不及嘆息 生活不是平平淡淡從從容容的東西 不能放棄
          posts - 57, comments - 5, trackbacks - 0, articles - 0

          XDoclet(ant)生成Hibernate映射文件

          Posted on 2006-08-18 16:36 ☆藍色夢想☆ 閱讀(446) 評論(0)  編輯  收藏 所屬分類: Hibernate
          java--->XDoclet(hibernatedoclet)--->Hbm---->SchemaExport(schemaexport,hbm2ddl)---->數據表

          ?1/**/?/*?
          ?2?*?Created?on?2006-4-7
          ?3??*/
          ?
          ?4?
          ?5?package??com.entity;
          ?6
          ?7?/**?*/?/**?
          ?8?*??@author??jkallen
          ?9?*?@hibernate.class?lazy="true"?table="syn_dept"
          10?*?@hibernate.cache?usage="read-write"
          11??*/
          ?
          12??public???class??SynDepartment???{
          13?
          14??/**?*/?/**??主鍵?id?*/?
          15??private??Long?id;
          16??/**?*/?/**??部門名稱?*/?
          17??private??String?code_name;
          18?
          19??/**?*/?/**?
          20??*??@return??Returns?the?id.
          21??*?@hibernate.id?generator-class="native"?column="id"
          22???*/
          ?
          23??????public??Long?getId()???{
          24???return??id;
          25?}
          ?
          26???public???void??setId(Long?id)???{
          27???this?.id??=??id;
          28?}
          ?
          29???/**?*/?/**?
          30????*??@return??Returns?the?code_name.
          31????*?@hibernate.property?column?=?"code_name"
          32?????*/
          ?
          33???public??String?getCode_name()???{
          34???return??code_name;
          35?}
          ?
          36???public???void??setCode_name(String?code_name)???{
          37???this?.code_name??=??code_name;
          38?}
          ?
          39}
          ?
          40
          這里用到了幾種@hibernate標記的用法
          @hibernate.class標記指定類的映射代碼,lazy="true" table="syn_dept"則如
          hibernate的映射文件class元素的屬性值具有相同的意義
          @hibernate.id標記指定類的OID映射代碼
          @hibernate.property標記指定類的屬性映射代碼
          另外還可能用到@hibernate.set(如一對多的情況下)

          2:XDoclet--->Hbm(寫在build.xml文件中,ANT運行)

          <target?name="toHbm"?
          ??depends
          ="compileEntity"?
          ??description
          ="Generate?hibernate?mapping?documents">
          ??
          <hibernatedoclet?destdir="${generated.dir}">
          ???
          <fileset?dir="${src.dir}">
          ????
          <include?name="**/entity/*.java"?/>
          ???
          </fileset>
          ???
          <hibernate?version="2.0"?/>
          ??
          </hibernatedoclet>

          ??
          <copy?todir="${classes.dir}">
          ???
          <fileset?dir="${generated.dir}"?/>
          ??
          </copy>
          ?
          </target>


          通過hibernatedoclet就可以生成SynDepartment.hbm.xml映射文件
          fileset顧名思義就是過濾文件了。
          注:compileEntity--編譯java源文件(自定義)

          3:SchemaExport---->數據表

          <target?name="toddl"?depends="init">
          ??
          <schemaexport?properties="${classes.dir}/hibernate.properties"?
          ???quiet
          ="no"?text="no"?drop="no"????
          ???delimiter
          ="&#xd;&#xa;go&#xd;&#xa;"?output="${sql.dir}/${synup.sql.file}"
          ???
          >
          ???
          <fileset?refid="hibernate.synup.mapping.files"?/>
          ??
          </schemaexport>
          ??
          <echo?message="Output?sql?to?file:?${sql.dir}/${sql.file}"?/>
          ?
          </target>
          ?
          <fileset?id="hibernate.synup.mapping.files"?dir="${classes.dir}">
          ??
          <include?name="**/entity/*.hbm.xml"?/>
          ?
          </fileset>


          ?通過schemaexport就向DB中生成table了。其中可能用到如下的一些屬性:
          ?quiet:如果為yes,表示不把子DDL腳本輸出到控制臺
          ?drop:如果為yes,只執行刪除數據庫中的操作,但不創建新的表
          ?text:如果為yes,只會生成DDL腳本文件,但不會在數據庫中執行DDL腳本
          ?output:指定存放DDL腳本文件的目錄
          ?config:設定基于XML格式的配置文件, hbm2ddl(schemaexport)工具從這個文件中讀取數據庫的配置信息
          ?properties:設定基于java屬性文件格式的配置文件,hbm2ddl(schemaexport)工具從這個文件中讀取DB的配置信息
          ?format:設定DDL腳本中SQL語句的格式
          ?delimiter:為DDL腳本設置行結束符
          ?
          ?在ANT中執行:
          ?<target name="initOnlySynup" depends="toHbm,toddl">
          ?</target>
          ?
          ?OK,最后生成的映射文件如下:

          <?xml?version="1.0"?>

          <!DOCTYPE?hibernate-mapping?PUBLIC
          ????"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"?
          ????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
          >

          <hibernate-mapping>
          ????
          <class
          ????????
          name="com.SynDepartment"
          ????????table
          ="syn_dept"
          ????????dynamic-update
          ="false"
          ????????dynamic-insert
          ="false"
          ????
          >
          ????????
          <cache?usage="read-write"?/>

          ????????
          <id
          ????????????
          name="id"
          ????????????column
          ="id"
          ????????????type
          ="java.lang.Long"
          ????????
          >
          ????????????
          <generator?class="native">
          ????????????
          </generator>
          ????????
          </id>

          ????????
          <property
          ????????????
          name="code_name"
          ????????????type
          ="java.lang.String"
          ????????????update
          ="true"
          ????????????insert
          ="true"
          ????????????access
          ="property"
          ????????????column
          ="code_name"
          ????????
          />

          ????????
          <!--
          ????????????To?add?non?XDoclet?property?mappings,?create?a?file?named
          ????????????????hibernate-properties-SynDepartment.xml
          ????????????containing?the?additional?properties?and?place?it?in?your?merge?dir.
          ????????
          -->

          ????
          </class>

          </hibernate-mapping>


          ?控制臺中部分信息如下:

          [schemaexport]?drop?table?syn_dept?cascade?constraints
          [schemaexport]?go
          [schemaexport]?drop?sequence?hibernate_sequence
          [schemaexport]?go
          [schemaexport]?create?table?syn_dept?(
          [schemaexport]?id?number(19,0)?not?null,
          [schemaexport]?code_name?varchar2(255),
          [schemaexport]?primary?key?(id)
          [schemaexport]?)

          DB中已經生成syn_dept表了,快去看下吧!

          關于Xdoclet 中的hibernate標簽更多信息可以參考:
          http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html#@hibernate_collection-key__0__1_
          我還在一個網友的博客上看到了他對此的漢化:
          http://blog.csdn.net/fasttalk/archive/2005/09/19/484615.aspx


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 醴陵市| 平顶山市| 西乡县| 文山县| 老河口市| 德化县| 台北县| 南京市| 宾川县| 托里县| 吴桥县| 霍林郭勒市| 锦屏县| 黎平县| 吴堡县| 文山县| 灌阳县| 浠水县| 海安县| 古浪县| 始兴县| 松溪县| 西城区| 泸水县| 罗田县| 夏河县| 龙泉市| 泾阳县| 大冶市| 五指山市| 台山市| 新疆| 五华县| 武川县| 云梦县| 江津市| 麻江县| 赤水市| 遂溪县| 余庆县| 延长县|