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代碼中寫一些規(guī)定的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. SchemaExport 如果寫好了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強大的靈活性。
|