hibernate代码自动生成

Hibernate中需要class和mappingfile,也就是java文件和hbm.xml文件,由于Hibernate只支持DML,不支持DDL,所以在DB中需要有DDL或已经存在的数据库的表。Hibernate中共有三种文件与代码自动生成功能有关:

class,mappingfileandDDL

1.Middlegen

是用来从DB中已存在的表,生成相应的mappingfile.可以下载一个老外的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生成的代码没有直接写mappingfile灵活性好,所以生成的mappingfile有时还需要我们去修改。

2.XDoclet

它是用来从java文件自动生成hbm文件的,不过我们需要在java代码中写一些规定的tag,才能得到自动生成的hbm文件.

Java代码

<hibernatedoclet

destdir="src"

excludedtags="@version,@author,@todo"

force="true"

verbose="true">

<filesetdir="src">

<includename="**/*.java"/>

<excludename="**/Product.java"/>

</fileset>

<hibernateversion="2.0"/>

</hibernatedoclet>

3.hbm2java

它是用来从mapping文件生成java代码的工具,调用很简单,在参数中需要给出所有的hbm文件,如下:

Java代码

<javaclassname="net.sf.hibernate.tool.hbm2java.CodeGenerator"fork="true">

<classpathrefid="classpath"/>

<argline="${build.gen-src.dir}/airline/hibernate/*.hbm.xml"/>

</java>

4.SchemaExport

如果写好了java文件和hbm文件,就可以用SchemaExport直接生成DDL文件,调用同样简单,只需在java代码中,加入如下:

Java代码

conf=newConfiguration();

.addClass(a.class);

.addClass(b.class);;

SchemaExportdbExport=newSchemaExport(conf);;

dbExport.setOutputFile("myschema.sql");;

dbExport.create(true,true);;

从这四种自动生成工具来看,mappingfile,javafileandDDL,只要知道任何一种文件,都可以得到另外两种文件,

如:

1.只有mappingfile:

mappingfile---hbm2java----java---SchemaExport----DDL

2.只有DDL

DDL---Middlegen---hbm----hbm2java----java

3.只有Java

java---XDoclet---hbm----SchemaExport----DDL

从这里,大家也可以体会到,Hibernate强大的灵活性。

相关推荐