在使用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实体类:
<span style="font-size:18px;"><span style="font-size:18px;">package com.bjsxt.oa.model; /** * * @author Administrator * @hibernate.class table="T_Person" */ public class Person { /** * @hibernate.id * generator-class="native" */ private int id; /** * @hibernate.property */ private String name; /** * @hibernate.property */ private String sex; /** * @hibernate.property */ private String address; /** * @hibernate.property */ private String duty; /** * @hibernate.property */ private String phone; /** * @hibernate.property */ private String description; /** * @hibernate.many-to-one */ private Orgnization org; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getDuty() { return duty; } public void setDuty(String duty) { this.duty = duty; } 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 String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Orgnization getOrg() { return org; } public void setOrg(Orgnization org) { this.org = org; } } </span></span>
在实体类上加上相应的注解后,在ant中定义一个新的xdoclet任务。
<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?> <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:\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" jdbcdriver="com.mysql.jdbc.Driver" jdbcusername="root" jdbcpassword="123456" 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> </span></span>
点击Ant插件构建插件
生成的Person.hbm.xml
<span style="font-size:18px;"><span style="font-size:18px;"><?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_Person" name="com.bjsxt.oa.model.Person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="sex"/> <property name="address"/> <property name="duty"/> <property name="phone"/> <property name="description"/> <many-to-one name="org"/> </class> </hibernate-mapping> </span></span>
hibernate.cfg.xml
<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/oa</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="com/bjsxt/oa/model/Orgnization.hbm.xml"/> <mapping resource="com/bjsxt/oa/model/Person.hbm.xml"/> </session-factory> </hibernate-configuration> </span></span>
在本文中可以看到,在理解了Hibernate核心之后,我们可以采用这一的工具来帮助我们开开发,Ant在自动构建和部署Java程序方面方便易用,不容易不错,而且非常灵活,不失为我们Java开发者的绝佳帮手。
Xdoclet + Ant自动生成Hibernate配置文件