JAVA

          人生若只如初見,何事秋風悲畫扇。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks

          通過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


          參考資料:Hibernate持久化技術詳解

          posted on 2006-04-10 19:00 Jkallen 閱讀(2463) 評論(0)  編輯  收藏 所屬分類: JEE學習其它開源
          主站蜘蛛池模板: 昔阳县| 麻栗坡县| 库尔勒市| 屏东县| 瑞丽市| 富蕴县| 云林县| 兰州市| 遵义县| 惠州市| 从化市| 水富县| 兴宁市| 西乌珠穆沁旗| 万盛区| 南陵县| 湘阴县| 桐乡市| 万州区| 乌兰浩特市| 武清区| 岱山县| 班玛县| 晋中市| 嵊州市| 绥阳县| 易门县| 嘉峪关市| 沈阳市| 光泽县| 新田县| 贵州省| 加查县| 锦屏县| 林周县| 四会市| 长丰县| 革吉县| 武鸣县| 兖州市| 孝义市|