Xdoclet + Ant自动生成Hibernate配置文件

 在使用Hibernate的时候,过多的Hibernate配置文件是一个让人头疼的问题。最近接触了Xdoclet这个工具。它实际上就是一个自动代码生成的工具,Xdoclet不能单独运行,必须搭配其他工具一起使用,比如ant。如果ant的工具不会用,建议先补充一下ant的基本知识在来学习Xdoclet。

     

Ant是什么?

       Apache Ant 是一个基于 Java的生成工具。生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本.

    更多的内容自己课下多多学习使用,不在阐述。


XDoclet是什么?

        XDoclet可以通过你在java源代码中的一些特殊的注释信息,自动为你生成配置文件、源代码等等,例如web、ejb的部署描述文件、为你生成struts的struts-config.xml配置文件、javascript校验等。


1.下载Xdoclet,解压。

2.在ant的build.xml中定义xdoclet任务


在这里我们做的是根据hibernate实体类生成hibernate映射文件,所以得先有Hibernate的实体类。


Person实体类:


[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><span style="font-size:18px;">package com.bjsxt.oa.model;  
  2.   
  3. /** 
  4.  *  
  5.  * @author Administrator 
  6.  * @hibernate.class table="T_Person" 
  7.  */  
  8. public class Person {  
  9.       
  10.     /** 
  11.      * @hibernate.id 
  12.      *      generator-class="native" 
  13.      */  
  14.     private int id;  
  15.       
  16.     /** 
  17.      * @hibernate.property 
  18.      */  
  19.     private String name;  
  20.       
  21.     /** 
  22.      * @hibernate.property 
  23.      */  
  24.     private String sex;  
  25.       
  26.     /** 
  27.      * @hibernate.property 
  28.      */  
  29.     private String address;  
  30.       
  31.     /** 
  32.      * @hibernate.property 
  33.      */  
  34.     private String duty;  
  35.       
  36.     /** 
  37.      * @hibernate.property 
  38.      */  
  39.     private String phone;  
  40.       
  41.     /** 
  42.      * @hibernate.property 
  43.      */  
  44.     private String description;  
  45.       
  46.     /** 
  47.      * @hibernate.many-to-one 
  48.      */  
  49.     private Orgnization org;  
  50.       
  51.     public String getAddress() {  
  52.         return address;  
  53.     }  
  54.     public void setAddress(String address) {  
  55.         this.address = address;  
  56.     }  
  57.     public String getDescription() {  
  58.         return description;  
  59.     }  
  60.     public void setDescription(String description) {  
  61.         this.description = description;  
  62.     }  
  63.     public String getDuty() {  
  64.         return duty;  
  65.     }  
  66.     public void setDuty(String duty) {  
  67.         this.duty = duty;  
  68.     }  
  69.     public int getId() {  
  70.         return id;  
  71.     }  
  72.     public void setId(int id) {  
  73.         this.id = id;  
  74.     }  
  75.     public String getName() {  
  76.         return name;  
  77.     }  
  78.     public void setName(String name) {  
  79.         this.name = name;  
  80.     }  
  81.     public String getPhone() {  
  82.         return phone;  
  83.     }  
  84.     public void setPhone(String phone) {  
  85.         this.phone = phone;  
  86.     }  
  87.     public String getSex() {  
  88.         return sex;  
  89.     }  
  90.     public void setSex(String sex) {  
  91.         this.sex = sex;  
  92.     }  
  93.     public Orgnization getOrg() {  
  94.         return org;  
  95.     }  
  96.     public void setOrg(Orgnization org) {  
  97.         this.org = org;  
  98.     }  
  99. }  
  100. </span></span>  

在实体类上加上相应的注解后,在ant中定义一个新的xdoclet任务。



[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <project name="OA系统构建脚本" default="生成Hibernate配置文件" basedir=".">  
  3.   
  4.     <property name="src.dir" value="${basedir}/src"/>  
  5.     <property name="build.dir" value="${basedir}/bin"/>  
  6.     <property name="webapp.dir" value="${basedir}/src/webapp"/>  
  7.     <property name="xdoclet.home" value="D:\xdoclet-plugins-1.0.3"/>  
  8.   
  9.     <!-- Build classpath -->  
  10.     <path id="xdoclet.task.classpath">  
  11.         <fileset dir="${xdoclet.home}/lib">  
  12.             <include name="**/*.jar"/>  
  13.         </fileset>  
  14.         <fileset dir="${xdoclet.home}/plugins">  
  15.             <include name="**/*.jar"/>  
  16.         </fileset>  
  17.     </path>  
  18.     <taskdef   
  19.         name="xdoclet"  
  20.         classname="org.xdoclet.ant.XDocletTask"  
  21.         classpathref="xdoclet.task.classpath"  
  22.     />  
  23.       
  24.     <target name="生成Hibernate配置文件">  
  25.         <xdoclet>  
  26.             <fileset dir="${src.dir}/com/bjsxt/oa/model">  
  27.                 <include name="**/*.java"/>  
  28.             </fileset>              
  29.             <component  
  30.                 classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin"  
  31.                   
  32.                 destdir="${src.dir}"  
  33.                 version="3.0"  
  34.                 hbm2ddlauto="update"  
  35.                 jdbcurl="jdbc:mysql://127.0.0.1/oa"  
  36.                 jdbcdriver="com.mysql.jdbc.Driver"  
  37.                 jdbcusername="root"  
  38.                 jdbcpassword="123456"  
  39.                 dialect="org.hibernate.dialect.MySQLDialect"  
  40.                 showsql="true"  
  41.             />  
  42.         </xdoclet>  
  43.     </target>  
  44.     <target name="生成hibernate映射文件">  
  45.         <xdoclet>  
  46.             <fileset dir="${src.dir}/com/bjsxt/oa/model">  
  47.                 <include name="**/*.java"/>  
  48.             </fileset>  
  49.             <component   
  50.                 classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"  
  51.                 version="3.0"  
  52.                 destdir="${src.dir}"  
  53.             />  
  54.         </xdoclet>  
  55.     </target>  
  56. </project>  
  57.   
  58.   
  59. </span></span>  


点击Ant插件构建插件


生成的Person.hbm.xml


[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.   
  4. <hibernate-mapping>  
  5.   <class table="T_Person" name="com.bjsxt.oa.model.Person">  
  6.     <id name="id">  
  7.       <generator class="native"/>  
  8.     </id>  
  9.     <property name="name"/>  
  10.     <property name="sex"/>  
  11.     <property name="address"/>  
  12.     <property name="duty"/>  
  13.     <property name="phone"/>  
  14.     <property name="description"/>  
  15.     <many-to-one name="org"/>  
  16.   </class>  
  17. </hibernate-mapping>  
  18. </span></span>  

hibernate.cfg.xml


[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  3.   
  4. <hibernate-configuration>  
  5.   <session-factory>  
  6.     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  7.     <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/oa</property>  
  8.     <property name="hibernate.connection.username">root</property>  
  9.     <property name="hibernate.connection.password">123456</property>  
  10.     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  11.     <property name="hibernate.show_sql">true</property>  
  12.     <property name="hibernate.hbm2ddl.auto">update</property>  
  13.     <mapping resource="com/bjsxt/oa/model/Orgnization.hbm.xml"/>  
  14.     <mapping resource="com/bjsxt/oa/model/Person.hbm.xml"/>  
  15.   </session-factory>  
  16. </hibernate-configuration>  
  17. </span></span>  

   在本文中可以看到,在理解了Hibernate核心之后,我们可以采用这一的工具来帮助我们开开发,Ant在自动构建和部署Java程序方面方便易用,不容易不错,而且非常灵活,不失为我们Java开发者的绝佳帮手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值