您的位置:首页 > 其它

XDoclet配合Ant生成Hibernate文件

2013-12-14 22:11 363 查看
    前面学习Hibernate时,说到Hibernate映射,方法有两种:注解和映射文件。各有利弊:就灵活性而言,映射文件的方式肯定更优,且分类管理更容易;而注解的优势在于容易理解,不用专门再写映射文件。

    现在引出问题,一些思维定势:类似注解和映射文件,我们总是习惯将它们分开来看,为什么两条路就要分开走?即既然各有优劣,为什么不合并到一起取长补短?当初学时,确有疑问:注解的方式程序既然能理解,为什么不自动生成映射文件?

Ant

    Ant是构建工具,什么是构建工具?在我看来,就是做一些辅助工作的,例如:编译、打包、测试、执行等。我觉得这个工具最好的优点是:可定制,也就是说你给它一个XML文件(build.xml或另定),指定工作内容和流程,然后它照章执行。

XDoclet

    XDoclet和注解像,但又不一样:同于都是以注释的方式卸载属性前,供程序解析;不同于根据解析的注释,配合Ant,可以生成相对应的文件——这不是上面说的注解和映射文件的合并么!

    注意虽然在此处以Hibernate映射文件为例,它可不是只能生成Hibernate的映射文件,Struts、源码、web样样精通。不过它不是独立的程序,需要依赖于Ant。

示例

    Organization.java

    此处以组织为例,使用XDoclet符号标记,与注解基本一致。

/**
*
* @author Administrator
* @hibernate.class table="T_Orgnization"
*/
public class Organization {

/**
* @hibernate.id
* 		generator-class="native"
*/
private int id;

/**
* @hibernate.property
*/
private String name;

/**
* @hibernate.property
*/
private String sn;

/**
* @hibernate.property
*/
private String description;

/**
* @hibernate.many-to-one
* 		column="pid"
*/
private Orgnization parent;

/**
* @hibernate.set inverse="true" lazy="extra"
* @hibernate.key column="pid"
* @hibernate.one-to-many class="com.tgb.oa.model.Orgnization"
*/
private Set children;

//此处省略getter和setter
}

    build.xml

    给Ant指定执行内容和流程的配置文件。

<?xml version="1.0" encoding="GBK"?>
<project name="系统构建脚本" default="生成映射文件" basedir=".">

<property name="src.dir" value="${basedir}/src"/>
<property name="xdoclet.home" value="D:\Program Files (x86)\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="生成映射文件">
<xdoclet>
<fileset dir="${src.dir}/com/tgb/oa/model">
<include name="**/*.java"/>
</fileset>
<component
classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"
version="3.0"
destdir="${src.dir}"
/>
</xdoclet>
</target>

</project>


    来分析一下这个配置文件

指定根目录位置
指定解析XDoclet符号的类
指定带解析类所在位置和命名特性
指定生成映射文件的类
指定映射文件生成位置

  映射文件

    Ant根据build.xml,生成的Hibernate映射文件如下:

<?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_Orgnization" name="com.tgb.oa.model.Orgnization">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sn"/>
<property name="description"/>
<many-to-one column="pid" name="parent"/>
<set name="children" inverse="true" lazy="extra">
<key column="pid"/>
<one-to-many class="com.tgb.oa.model.Orgnization"/>
</set>

</class>
</hibernate-mapping>

总结

    举一反三

    我觉得学习使用工具不难,难的是能不能找到共性进而升华,例如从SSH的学习开始,解耦合用的一直是xml文件,如果开发中碰到解耦合的问题能不能想到xml?

    与自己有关

    另外,工具的学习,也很重要的是,能不能知其然,再知其所以然:如果没有Ant及类似的工具,你会不会去开发一个类似的工具?不要一直跟随别人,你也可以做个领路人。

    

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: