欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

使用XDoclet2生成hibernate映射文件進而生成數

系統 1688 0
????? 在我的一篇“ 用Xdoclet由POJOt生成hbm文件時不能生成meta注釋的問題 ”中介紹了采用xdoclet1生成hibernate映射文件的一些問題,這里不再提了,有興趣的朋友可以看一下。
?????? 在采用xdoclet1生成了帶meta標記的注釋后問題依然沒有斷,在使用hibernate的SchemaExportTask生成ddl數據庫腳本的時候發現生成的腳本都沒有注釋,就是字段或者表后面加上comment定義( 如:MZ varchar(255) comment '名字', 以mysql為例 ),查找原因,原來是我用的hibernate版本(hibernate3.2.7)有點高,這時的hibernate開始支持comment標記生成注釋了,不再支持meta啦。當然如果替換成hibernate3.1版本的是可以生成注釋的。。
??????? 這里我不準備使用hibernate3.1,但是xdoclet1不支持@hibernate.comment生成<comment>名字</comment>標記的生成,無奈放棄xdoclet1,使用xdoclet2。
xdoclet2對hibernate的支持非常的好,所有的標簽都有了,可以像使用hibernate標記一樣使用它們,xdoclet2的hibernateTag參見 http://xdoclet.codehaus.org/HibernateTags 。下面就是用xdoclet2演示一下生成hibernate3映射文件進而生成ddl數據庫schema腳本。開發環境如下:
  • Eclipse3.4
  • jdk5.0.20
  • ant1.7.0(Eclipse自帶的)
  • xdoclet-plugins(即xdoclet2) 下載地址
  • hibernate3.2.7ga

????? 項目目錄結構如下:

使用XDoclet2生成hibernate映射文件進而生成數據庫ddl腳本
????? 引用的jar列表如下:
使用XDoclet2生成hibernate映射文件進而生成數據庫ddl腳本

????? 1. 新建一個Person實體類代碼如下:
    package com.flysnow.domain.entity;

import java.io.Serializable;

/**
 * @author 飛雪無情
 * @since:2010-2-20
 */
/**
 * @hibernate.mapping default-lazy="false"
 * @hibernate.class table="t_person"
 * @hibernate.comment 人
 */
public class Person implements Serializable {
	private static final long serialVersionUID = 6422096732289758030L;
	private Long id;//標識
	private String name;//名字
	private Integer age;//年齡
	/**
	 * @hibernate.id generator-class="native"
	 * @hibernate.column name="ID" comment="標識"
	 */
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	/**
	 * @hibernate.property type="string" length="50" not-null="true"
	 * @hibernate.column name="MZ"comment="名字"
	 */
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @hibernate.property type="integer" not-null="true"
	 * @hibernate.column name="NL" comment="年齡"
	 */
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

}

  

這個類很簡單,很好理解,其中
    @hibernate.comment 人
  
就是xdoclet2中對實體類的注釋標記,而
    @hibernate.column name="ID" comment="標識"
  
則是對字段的注釋標記,生成dll數據庫腳本就是對表和列的注釋說明。
?????? 2.新建ant腳本build.xml
    <?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2010-2-20 下午02:45:02                                                        

     project    
     description
                   
     飛雪無情                                                                
     ====================================================================== -->
<project name="project" default="generator-schema" basedir=".">
	<path id="build.lib">
		<fileset dir="${basedir}/lib">
			<include name="**/*.jar"/>
		</fileset>
		<fileset dir="${basedir}/lib/xdoclet">
			<include name="**/*.jar"/>
		</fileset>
		<pathelement location="${basedir}/build/class"/>
	</path>
	<target name="complie" description="編譯">
		<javac srcdir="${basedir}/src" destdir="${basedir}/build/class">
			<classpath refid="build.lib"></classpath>
		</javac>
	</target>
	<target name="generator-mapping" description="生成Mapping文件">
		<taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="build.lib"></taskdef>
		<echo message="生成Mapping文件..."></echo>
		<xdoclet>
			<fileset dir="${basedir}/src">
				<include name="**/entity/*.java"/>
			</fileset>
			<component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" destdir="${basedir}/src" version="3.0" encoding="UTF-8" force="true"/>
		</xdoclet>
	</target>
	<target name="generator-schema" depends="complie" description="生成schema文件">
			<taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="build.lib"></taskdef>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
		    <property name="hibernate.format_sql" value="true"/>
		    <property name="hibernate.use_sql_comments" value="true"/>
			<echo message="生成schema文件..."></echo>
			<schemaexport quiet="no" text="yes" drop="no" delimiter=";" output="${basedir}/src/ant-schema.sql">
				<fileset dir="${basedir}/src">
					<include name="**/entity/*.hbm.xml"/>
				</fileset>
			</schemaexport>
		</target>
</project>


  

?????? 下面對ant腳本解釋一下,這段
    <path id="build.lib">
		<fileset dir="${basedir}/lib">
			<include name="**/*.jar"/>
		</fileset>
		<fileset dir="${basedir}/lib/xdoclet">
			<include name="**/*.jar"/>
		</fileset>
		<pathelement location="${basedir}/build/class"/>
	</path>
  
是定義一個classpath,這里一定記得把編譯后的實體的class文件加入到classp里面否則在生成ddl的數據會報
引用
Schema text failed: Could not parse mapping document from file E:\workspace\ant\src\com\flysnow\domain\entity\Person.hbm.xml
的異常。這問異常困擾了我很久。
?????? 下面這段是一個編譯任務,相信大家都理解。
    <target name="complie" description="編譯">
		<javac srcdir="${basedir}/src" destdir="${basedir}/build/class">
			<classpath refid="build.lib"></classpath>
		</javac>
	</target>
  

????? 下面的就是生成Mapping的任務了,比較主要的就是對Task的定義
    <taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="build.lib"></taskdef>
  
以及xdoclet的使用
    <xdoclet>
			<fileset dir="${basedir}/src">
				<include name="**/entity/*.java"/>
			</fileset>
			<component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" destdir="${basedir}/src" version="3.0" encoding="UTF-8" force="true"/>
		</xdoclet>
  
其中比較新的就是component標記的使用了,這里其實就是以插件的形式引入對生成hibernate Mapping文件的支持,其主要屬性有
  • version hibernate版本號,支持1.0,2.0和3.0
  • encoding 生成的Mapping文件的編碼 默認是ISO-8859-1
  • force 是否每次都強制重新生成Mapping文件,默認為false,只有在實體的xdoclet標記改變的時候才重新生成。

其他的一些屬性可以參考 http://xdoclet.codehaus.org/HibernateMappingPlugin
????? 最后就是生成ddl數據庫腳本的任務,任務定義也很簡單
    <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="build.lib"></taskdef>
  
關鍵的幾個需要配置的屬性
如下,這些是為SchemaExportTask任務提供的。
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
		    <property name="hibernate.format_sql" value="true"/>
		    <property name="hibernate.use_sql_comments" value="true"/>
  

????? 下面是該任務的一些常用屬性:
  • quiet 不要把腳本輸出到stdout
  • drop 只進行drop tables的步驟
  • create 只創建表
  • text 不執行在數據庫中運行的步驟
  • output 把輸出的ddl腳本輸出到一個文件
  • config 從XML文件讀入Hibernate配置
  • properties 從文件讀入數據庫屬性
  • format 把腳本中的SQL語句對齊和美化
  • delimiter 為腳本設置行結束符

要注意的地方是text屬性,如果你不想生成ddl數據庫腳本的同時還導入到數據庫,就把屬性值設為yes,否則你就必須得為hibernate配置數據庫連接的屬性(連接url,用戶名密碼等),如若不然就會拋
引用
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
異常
????? 3.測試結果
現在項目已經完成了,我們打開cmd,cd進入到build.xml文件所在的目錄,運行ant generator-mapping會生成Mapping文件,運行ant generator-schema就會生成ddl數據庫schema腳本。。當然不要忘記創建ANT_HOME環境變量并且把ant加入到path環境變量中..附件中有完整的工程。

使用XDoclet2生成hibernate映射文件進而生成數據庫ddl腳本


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久草免费在线观看 | 一级做a爰片久久毛片唾 | 久久99深爱久久99精品 | 久久国内精品视频 | 午夜伦4480yy私人影院 | 日本无码V视频一区二区 | 国产精品久久久久久吹潮 | 1级a的观看视频 | 日日操视频| 色老师 | 理论片91| 亚洲免费在线观看视频 | 亚洲在线播放 | 偷拍自拍五月天 | 激情福利视频 | 奇米影视第七色 | 亚洲嗯啊| 黄色av一区 | 亚洲精品久久久蜜桃 | 波多野结衣视频免费观看 | 欧美在线不卡视频 | 国产精品国产三级国产aⅴ中文 | 国产一区二 | 一级做a爰片性色毛片中国 日本黄色免费片 | 国产精品a在线观看香蕉 | 久久草在线视频免费 | 国产视频国产 | 免费精品一区二区三区在线观看 | 精品一区二区三区四区 | 欧美色综合天天久久综合精品 | 久久亚洲精品国产亚洲老地址 | 毛片免费观看 | 国产精品视频免费 | 国产精品综合色区小说 | 91在线 在线播放 | 九九热久久免费视频 | 狠狠色噜噜狠狠狠狠97影音先锋 | 伦理二区 | 久久久久亚洲精品 | 亚洲日韩欧洲无码av夜夜摸 | 狠狠色欧美亚洲狠狠色五 |