Hibernate---通過XDoclet(ant)生成Hibernate映射文件(轉載)

          通過XDoclet可以我們的精力放在編寫java源文件上。

          具體來說就是:
          只有Java: java--->XDoclet(hibernatedoclet)--->Hbm---->SchemaExport(schemaexport,hbm2ddl)---->數據表

          1:java源文件編寫

          /*
          ?*?Created?on?2006-4-7
          ?
          */


          package ?com.entity;

          /**
          ?*?
          @author ?jkallen
          ?*?@hibernate.class?lazy="true"?table="syn_dept"
          ?*?@hibernate.cache?usage="read-write"
          ?
          */

          public ? class ?SynDepartment? {
          ?
          ?
          /** ?主鍵?id */
          ?
          private ?Long?id;
          ?
          /** ?部門名稱 */
          ?
          private ?String?code_name;
          ?
          ?
          /**
          ??*?
          @return ?Returns?the?id.
          ??*?@hibernate.id?generator-class="native"?column="id"
          ??
          */

          ????
          public ?Long?getId()? {
          ??
          return ?id;
          ?}

          ?
          public ? void ?setId(Long?id)? {
          ??
          this .id? = ?id;
          ?}

          ?
          /**
          ????*?
          @return ?Returns?the?code_name.
          ????*?@hibernate.property?column?=?"code_name"
          ????
          */

          ?
          public ?String?getCode_name()? {
          ??
          return ?code_name;
          ?}

          ?
          public ? void ?setCode_name(String?code_name)? {
          ??
          this .code_name? = ?code_name;
          ?}

          }




          這里用到了幾種@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



          posted on 2006-06-09 09:24 nbt 閱讀(496) 評論(0)  編輯  收藏 所屬分類: ORMapping框架

          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Java技術網站

          友情鏈接

          國內一些開源網站

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 延寿县| 洛宁县| 怀仁县| 小金县| 定兴县| 永胜县| 循化| 绵竹市| 大冶市| 广水市| 永修县| 逊克县| 锡林浩特市| 涪陵区| 巴中市| 东海县| 泽库县| 曲阜市| 扶沟县| 东乌珠穆沁旗| 报价| 河南省| 民乐县| 缙云县| 乡城县| 望都县| 额济纳旗| 宣威市| 白朗县| 娄烦县| 乾安县| 铁力市| 宁海县| 吉水县| 修武县| 赣州市| 海淀区| 潼关县| 揭西县| 建湖县| 哈巴河县|