XDoclet配合Ant生成Hibernate文件

    前面学习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及类似的工具,你会不会去开发一个类似的工具?不要一直跟随别人,你也可以做个领路人。

    

    


你可能感兴趣的:(XDoclet配合Ant生成Hibernate文件)