OA8_2_Xdoclet介绍

介绍Xdoclet工具的基本概念及其与Ant结合使用的方法,用于自动生成Hibernate配置文件及映射文件。通过实例演示了如何利用Xdoclet注释Java类以生成对应的Hibernate XML映射。

Xdoclet基本概念
我们可以在java代码中使用类似于javadoc的注释,来表达更多的内容。这些额外的注释,通过使用xdoclet工具,我们可以将它们转换为我们需要的各种配置文件。先看一个简单的例子:

比如有一个java文件的源代码如下:

/**

 * @hibernate.class

 *                     table="T_Party"

 */

说明:生成映射文件,class是Party,table是T_Party

public class Party {

           

            /**

             * @hibernate.id

             *                     generator-class="native"

             */

说明:定义一个id,下面是定义策略,int是"native",字符串是”uuid”

            private int id;

           

            /**

             * @hibernate.many-to-one

             *                     column="parentid" 

             */

说明:many-to-one标签,下面定义的是外键

            private Party parent;

           

            /**

             * @hibernate.set

             * @hibernate.key

             *   column = "parentid"

             * @hibernate.one-to-many

             *                     class = "com.bjsxt.oa.model.Party"      

             */

说明:树形结构,双向关联,指定column = "parentid",和上面的进行关联

            private Set children;

           

            /**

             * @hibernate.property

             *                     column="thename"

             */       

            private String name;

           

            /**

             * @hibernate.property

             */

            private String sn;

           

            /**

             * @hibernate.property

             */

            private String description;

           

            /**

             *

             * @return

             */

            public Set getChildren() {

                        return children;

            }

            public void setChildren(Set children) {

                        this.children = children;

            }

            public String getDescription() {

                        return description;

            }

            public void setDescription(String description) {

                        this.description = description;

            }

           

            /**

             */       

            public int getId() {

                        return id;

            }

            public void setId(int id) {

                        this.id = id;

            }

           

 

            public String getName() {

                        return name;

            }

            public void setName(String name) {

                        this.name = name;

            }

            public Party getParent() {

                        return parent;

            }

            public void setParent(Party parent) {

                        this.parent = parent;

            }

            public String getSn() {

                        return sn;

            }

            public void setSn(String sn) {

                        this.sn = sn;

            }

}

 
 

 

通过xdoclet,我们可以得到关于这个类的Hibernate映射文件(意思是使用这个xdoclet工具和自己手工配置的效果是一致的),如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping>

  <class table="T_Party" name="com.bjsxt.oa.model.Party">

    <id name="id">

      <generator class="native"/>

    </id>

    <many-to-one column="parentid" name="parent"/>

    <set name="children">

      <key column="parentid"/>

      <one-to-many class="com.bjsxt.oa.model.Party"/>

    </set>

    <property name="name" column="thename"/>

    <property name="sn"/>

    <property name="description"/>

  </class>

</hibernate-mapping>

 
 

 

如何开始使用Xdoclet?
Xdoclet不是单独可以运行的工具(不像Ant工具),它可以与其它工具一起配合运行,如Ant。我们下面的例子就是基于Ant和xdoclet的。

 

<!--[if !supportLists]-->1、<!--[endif]-->首先需要保证ant是可用的

<!--[if !supportLists]-->2、<!--[endif]-->下载并解压xdoclet的包(我们现在使用的是xdoclet2,具体版本是xdoclet-plugins-1.0.3)。

<!--[if !supportLists]-->3、<!--[endif]-->在ant构建工具中定义xdoclet任务,并使用:

<?xml version="1.0" encoding="GBK"?>

<project name="OA系统构建脚本" default="生成Hibernate配置文件" basedir=".">

 

      <property name="src.dir" value="${basedir}/src"/>

      <property name="build.dir" value="${basedir}/bin"/>

      <property name="webapp.dir" value="${basedir}/src/webapp"/>

      <property name="xdoclet.home" value="D:/opensources/xdoclet/xdoclet-plugins-1.0.3"/>

 

      <!-- Build classpath -->

      <path id="xdoclet.task.classpath">

            <fileset dir="${xdoclet.home}/lib">

            <include name="**/*.jar"/>

            </fileset>

            <fileset dir="${xdoclet.home}/plugins">

            <include name="**/*.jar"/>

            </fileset>

      </path>

      <taskdef

            name="xdoclet"

            classname="org.xdoclet.ant.XDocletTask"

            classpathref="xdoclet.task.classpath"

      />

     

      <target name="生成Hibernate配置文件">

            <xdoclet>

                  <fileset dir="${src.dir}/com/bjsxt/oa/model">

                        <include name="**/*.java"/>

                  </fileset>             

                  <component

                        classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin"

                        destdir="${src.dir}"

                        version="3.0"

                        hbm2ddlauto="update"

                        jdbcurl="jdbc:mysql://127.0.0.1/oa_200706"

                        jdbcdriver="com.mysql.jdbc.Driver"

                        jdbcusername="root"

                        jdbcpassword="mysql"

                        dialect="org.hibernate.dialect.MySQLDialect"

                        showsql="true"

                  />

            </xdoclet>

      </target>

      <target name="生成hibernate映射文件">

            <xdoclet>

                  <fileset dir="${src.dir}/com/bjsxt/oa/model">

                        <include name="**/*.java"/>

                  </fileset>

                  <component

                        classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"

                        version="3.0"

                        destdir="${src.dir}"

                  />

            </xdoclet>

      </target>

</project>

 

 
 

 

以上就是一个完整的可运行的ant构建脚本。我们努力来理解这个文件吧:

 

1、<property>标签定义一些变量,这些变量可以通过${变量名}的方式引用

2、<path>标签定义了类路径

3、<taskdef>标签定义了xdoclet任务(因为ant本身肯定是不包含xdoclet任务的)

4、我们在下面的两个<target>中,使用了<xdoclet>标签,这个标签正是我们自己定义的。

 

Xdoclet可以干什么?
Xdoclet实际上就是一个自动代码生成的工具,它可以生成各种各样的代码或配置文件(如果你很清楚xdoclet,你也可以对它进行扩展)。在默认的情况下,xdoclet已经给我们提供了很多的解决方案。这些解决方案叫做plugin,即插件。在xdoclet的官方网站上:http://xdoclet.codehaus.org,我们可以获得关于它支持的所有的plugin的情况。

 

Xdoclet通过plugin来支持代码的自动生成。我们要使用xdoclet,可以将它定义为ant的一个任务(如上所述)。然后就可以使用xdoclet了。在<xdoclet>标签内部使用xdoclet。由于xdoclet通常用来对源文件进行扫描,并读取源文件中的注释,然后再根据这些注释生成相应的配置文件,所以,通常我们需要定义让xdoclet扫描哪些源代码文件。对于这个需要,我们通过<fileset>标签来满足!

 

通过<component>标签,我们可以来使用xdoclet的众多plugin。上述例子,我们使用了xdoclet对hibernate支持的plugin。

具体如何使用这些plugin,请参考这些plugin的使用手册!!

 

 

---------------------------------------------------------------------------------------------------------------


 

 

关于使用Xdoclet实现配置文件和User的映射文件的自动生成:

 

先创建build.xml,在其中定义xdoclet任务,用以生成Hibernate配置文件和Hibernate映射文件。

 

创建实体类User(其中有很多注释),通过使用xdoclet工具,我们可以将它们转换为我们需要的各种配置文件。

 

在Eclipse中增加Ant任务栏,通过“Add Buildfiles”来生成两个任务。

 

 

 

 

运行“生成Hibernate配置文件”,会自动产生User.hbm.xml。

 


第一次运行时产生错误,报“元数据为空”,是因为没有新建一个User的类,无源之水。

 

 

 

 

建立好User类后,再使用。

 

 

 

 

 

 

 


 

生成Hibernate映射文件,会自动在hibernate.cfg.xml文件中增加一项

“<mapping resource=”com/bjsxt/oa/model/User.hbm.xml”>”

 

 

 

 

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yyg_juke/archive/2008/08/03/2761883.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值