from:http://www.cnblogs.com/sunsonbaby/archive/2005/01/11/90281.html
作者:bruce
整理人:smallduzi
版權聲明:本文嚴禁轉載,如有轉載請求,請和作者聯繫
Hibernate中需要class和mapping file, 也就是java文件和hbm.xml文件,由於Hibernate只支持DML, 不支持DDL,所以在DB中需要有DDL或已經存在的數據庫的表。Hibernate中共有三種文件與代碼自動生成功能有關:
class, mapping file and DDL
1. Middlegen
是用來從DB中已存在的表,生成相應的mapping file. 可以下載一個老外的middlegen的例子。
http://sourceforge.net/project/showfiles.php?group_id=40712
調用Middlegen很簡單,例子中的middlegen自動生成ant指令如下
<middlegen appname="${name}" prefsdir="${src.dir}" gui="${gui}" databaseurl="${database.url}" initialContextFactory="${java.naming.factory.initial}" providerURL="${java.naming.provider.url}" datasourceJNDIName="${datasource.jndi.name}" driver="${database.driver}" username="${database.userid}" password="${database.password}" > <hibernate destination="${build.gen-src.dir}" package="${name}.hibernate" /> </middlegen>
然後會有一個GUI,給我們專門設計各種表與表之間的關係(一對一,一對多以及單向雙向關係)。需要說明的是,middlegen生成的代碼沒有直接寫mapping file靈活性好,所以生成的mapping file有時還需要我們去修改。
2. XDoclet
它是用來從java文件自動生成hbm文件的,不過我們需要在java代碼中寫一些規定的tag,才能得到自動生成的hbm文件.
<hibernatedoclet destdir="src" excludedtags="@version,@author,@todo" force="true" verbose="true"> <fileset dir="src"> <include name="**/*.java"/> <exclude name="**/Product.java"/> </fileset> <hibernate version="2.0"/> </hibernatedoclet>
3. hbm2java
它是用來從mapping 文件生成java代碼的工具,調用很簡單,在參數中需要給出所有的hbm文件,如下:
<java classname="net.sf.hibernate.tool.hbm2java.CodeGenerator" fork="true"> <classpath refid="classpath"/> <arg line="${build.gen-src.dir}/airline/hibernate/*.hbm.xml"/> </java>
4. Schema Export
如果寫好了java文件和hbm文件,就可以用SchemaExport直接生成DDL文件,調用同樣簡單,只需在java代碼中,加入如下:
conf = new Configuration() .addClass(a.class) .addClass(b.class); SchemaExport dbExport = new SchemaExport(conf); dbExport.setOutputFile("myschema.sql"); dbExport.create(true, true);
從這四種自動生成工具來看, mapping file, java file and DDL,只要知道任何一種文件,都可以得到另外兩種文件,
如:
1. 只有mapping file:
mapping file---hbm2java----java---SchemaExport----DDL
2.只有DDL
DDL---Middlegen---hbm----hbm2java----java
3.只有Java
java---XDoclet---hbm----SchemaExport----DDL
從這裏,大家也可以體會到, Hibernate強大的靈活性