XDoclet配合Ant生成Hibernate文件
2013-12-14 22:11
363 查看
前面学习Hibernate时,说到Hibernate映射,方法有两种:注解和映射文件。各有利弊:就灵活性而言,映射文件的方式肯定更优,且分类管理更容易;而注解的优势在于容易理解,不用专门再写映射文件。
现在引出问题,一些思维定势:类似注解和映射文件,我们总是习惯将它们分开来看,为什么两条路就要分开走?即既然各有优劣,为什么不合并到一起取长补短?当初学时,确有疑问:注解的方式程序既然能理解,为什么不自动生成映射文件?
注意虽然在此处以Hibernate映射文件为例,它可不是只能生成Hibernate的映射文件,Struts、源码、web样样精通。不过它不是独立的程序,需要依赖于Ant。
来分析一下这个配置文件
指定根目录位置
指定解析XDoclet符号的类
指定带解析类所在位置和命名特性
指定生成映射文件的类
指定映射文件生成位置
现在引出问题,一些思维定势:类似注解和映射文件,我们总是习惯将它们分开来看,为什么两条路就要分开走?即既然各有优劣,为什么不合并到一起取长补短?当初学时,确有疑问:注解的方式程序既然能理解,为什么不自动生成映射文件?
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及类似的工具,你会不会去开发一个类似的工具?不要一直跟随别人,你也可以做个领路人。相关文章推荐
- 《大学数学遐想》系列之函数与数列
- woj1419 无聊的游戏
- 广工嵌入式系统课程设计——单片机售票机
- 用GDB调试程序
- android 中的 Matrix,ColorMatrix 详解
- java文件受限搜索
- 整合SSH2框架之—init.properties 文件的写法
- Spring中的DI和AOP
- su ,su - ,sudo区别(每日一令之十一)
- 怎样处理79MB的msdrvload.jpg病毒
- iOS 通知机制 Notifications (二)
- Maven的生命周期
- oracle调用DLL
- 博客园开篇,自己开发的双色球小助手
- C# 初学之 引用类型的思考
- 企业ARP欺骗分析及防御:不同网段欺骗分析及对策
- APP安全,别忘了开发者
- 程序,进程,线程好好搞懂这些东西
- 二叉查找树的插入与删除
- fW - medians of medians algo - calculate the median in O(n)