xdoclet 與 hibernate

這裏將利用xdoclet來爲hibernate生成相關代碼(由Customer.java生成Customer.hbm.xml),看看xdoclet對提供工作效率的。

運行環境:
1、xdoclet
2、ant
3、hibernate
需要的jar包有

xdoclet-/X.X.X/.jar xdoclet-hibernate-module-/X.X.X/.jar xdoclet-xjavadoc-/X.X.X/.jar xdoclet-xdoclet-module-/X.X.X/.jar log4j-/X.X.X/.jar commons-collections-2.0.jar commons-logging.jar

前四個可以從xdoclet裏的lib裏面找到(這裏“ /X.X.X/ ” 表示版本號),後面的幾個我想大家都熟了吧可以從很多地方找到。


程序
看下文件結構
.(項目目錄)
     |
     -src(文件夾,命名src.dir,存放源文件)
     |
     -lib(文件夾,命名lib.dir,存放上面提到的幾個jar文件)
              |
              -*.jar
     |
     -bin(文件夾,命名bin.dir)
             |
             -src(文件夾,存放生成的*.java文件,這裏將不用到)
             |
             -classes(文件夾,存放所編譯的*.class文件)
    |
    -build.xml
 
看下源程序吧。
1、Customer.java

/*
 * Created on 2004-12-20
 * @author roson
 */
package hibernate;
import java.util.Set;
import java.util.Collections;
/**
 * @author roson
 * @since 1.0
 * @version 1.0
 * @hibernate.class tables="customers"
 */
public class Customer {
    /**This customer's identifier field.
     */
    private long id;
   
    /**This customer's name field.
     */
    private String name;
   
    /**The customer's orders set.
     */
    private Set orders=Collections.EMPTY_SET;
   
    /**The default construtor for Hibernate to instantiate with.
     */
    public Customer() {}
   
    /**The getter method for this Customer's identifier.
     *
     * @hibernate.id generator-class="native"
     */
    public long getId()
    {
        return id;
    }
   
    /**The setter method for this Customer's identifier.
     */
    public void setId(long id)
    {
        this.id=id;
    }
   
    /**The getter method for this Customer's name.
     *
     * @hibernate.property
     */
    public String getName()
    {
        return name;
    }
   
    /**The setter method for this Customer's name.
     */
    public void setName(String name)
    {
        this.name=name;
    }
   
    /**The getter method for this Customer's orders.
     *
     * @hibernate.set role="orders"
     *
     * @hibernate.collection-key column="customer_id"
     *
     * @hibernate.collection-one-to-many class="Order"
     */
    public Set getOrders()
    {
        return orders;
    }
   
    /**The setter method for this Customer's orders.
     */
    public void setOrders(Set orders)
    {
        this.orders=orders;
    }
}

可以看到在源程序中多了一些註釋之類的標籤,xdoclet就是通過這些標籤來識別自動生成xml文件的,除此之外Customer.java與普通的javabean沒什麼區別。
注意:這裏Customer.java打包爲hibernate,如要改動要更改一下build.xml。

2、build.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="hibernate" default="compile" basedir=".">
 <property name="src.dir" location="src"></property>
 <property name="bin.dir" value="bin"></property>
 <property name="lib.dir" location="lib"></property>
 <path id="lib.path">
 <fileset dir="${lib.dir}">
 <include name="*.jar"/>
 </fileset> 
  <pathelement location="lib/xdoclet-hibernate-module-1.2.1.jar"/>
 </path>
 <target name="init">
  <tstamp>
  <format property="TODAY" pattern="yy-mm-d"/>
  </tstamp>
  <mkdir dir="bin"/>
  <mkdir dir="${bin.dir}/src"/>
  <mkdir dir="${bin.dir}/classes"/>
  <taskdef   name="hibernatedoclet"
     classname="xdoclet.modules.hibernate.HibernateDocletTask"
     classpathref="lib.path"
    />
  
  <taskdef name="ejbdoclet"
    classname="xdoclet.ejb.EjbDocletTask"
    classpathref="lib.path">
  </taskdef>
 </target>


 <target name="compile" depends="init,hibernate">
 <javac srcdir="${src.dir};${bin.dir}/src" destdir="${bin.dir}/classes">
 <classpath refid="lib.path"></classpath>
 </javac>
 </target>
 

 <target name="hibernate" depends="init">
  <hibernatedoclet
   destdir="${bin.dir}"
   mergedir="${bin.dir}"
   force="${bin.dir}"
   excludedtags="@version,@author,@todo"
   addedtags="@xdoclet-generated at ${TODAY},@copyright netone,@author roson,@version ${version}"
   verbose="false"
   >
   <fileset dir="${src.dir}">
   <include name="*.java"/>
   </fileset>
   <hibernate version="2.0"/>
  </hibernatedoclet>
 </target>
 
 
 <target name="clean">
 <delete dir="${bin.dir}"></delete>
 </target>
</project>

build.xml文件通過ant來運行。首先 請確保ant能夠運行,接着 打開 命令提示行(在運行那裏輸入cmd),轉到上面結構所提的“項目目錄”,直接輸入  ant    就行。
注意:
最讓我煩惱的就是 taskdef 部分。原因就是沒有把所需要的jar包放進 lib 文件夾。並且要理解的是,它所需的classname="xdoclet.modules.hibernate.HibernateDocletTask"  ,並不僅僅要求含有HibernateDocletTask.class這個文件的包,而是同時需要幾個包同時存在。希望大家不要在犯同樣的錯誤。

好了,大體就是這樣了。可以參照http://www.hibernate.org/72.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章