Hibernate自动生成文件总结

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文件.

Java代码 
<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>  
Java代码
<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> 

<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代码 
<java classname="net.sf.hibernate.tool.hbm2java.CodeGenerator" fork="true">   
      <classpath refid="classpath"/>   
      <arg line="${build.gen-src.dir}/airline/hibernate/*.hbm.xml"/>   
    </java>  
Java代码
<java classname="net.sf.hibernate.tool.hbm2java.CodeGenerator" fork="true">  
      <classpath refid="classpath"/>  
      <arg line="${build.gen-src.dir}/airline/hibernate/*.hbm.xml"/>  
    </java> 

<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代码中,加入如下:

Java代码 
conf = new Configuration();   
     .addClass(a.class);   
     .addClass(b.class);;   
SchemaExport dbExport = new SchemaExport(conf);;   
dbExport.setOutputFile("myschema.sql");;   
dbExport.create(true, true);;  
Java代码
conf = new Configuration();  
     .addClass(a.class);  
     .addClass(b.class);;  
SchemaExport dbExport = new SchemaExport(conf);;  
dbExport.setOutputFile("myschema.sql");;  
dbExport.create(true, true);; 

     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强大的灵活性。

你可能感兴趣的:(java,sql,PHP,Hibernate,ant)