使用Ant自动化发开Hibernate

使用Ant自动化发开Hibernate

在开发使用Hibernate框架应用程序中,无外乎要创建hibernate.cfg.xml,xxx.hbm.xml,pojos和databaseSchema这些文件,框架这东西刚开始学会的时候,都是心情舒畅,热情高涨,所有文件都是自己手写不管这样重复性的工作有多么的乏味,爱情都会由低潮期更别说重复Coding了,久而久之在编写一个个xml、pojo和schema的过程中,不由从心中产生一种不舒畅之气。我曾经有一段时间见到代码文件就有想吐的冲动,不过还好我还是挺过来,嘛也就是像爱情麻木期一样,怎么都无所谓了。直到最近了解到Ant这个工具,让我看到了另一种发开Hibernate应用程序的方式,并不是说这样的开发方式就一定好于纯手工编写,适合自己才是最好的,但我是一个比较爱偷懒的,自动化构建非常的吸引我。开头字数凑够了就进入正题了,首先直接上build.xml,这个文件是ant所需要的

<?xmlversion="1.0"encoding="UTF-8"?>

<projectname="hibernatetools"basedir="."default="useHibernateTool">

<!--导入build.properties文件,该文件定义一些常量,这些常量也可以是用<propertyname=""value="">的形式定义-->

<propertyfile="build.properties"></property>

<!--定义依赖包所在的位置,"${reference_libs_dir}"表示引用名为"reference_libs_dir"的常量-->

<pathid="referencelib">

<filesetdir="${reference_libs_dir}">

<!--匹配模式,表示该目录下所有jar文件-->

<includename="**/*.jar"/>

</fileset>

</path>

<!--自定义AntTask,但是使用的自定义类为Hibernate为我们提供的-->

<taskdefname="hibernatetool"classname="org.hibernate.tool.ant.HibernateToolTask"classpathref="referencelib"></taskdef>

<!--使用hibernatetool-->

<targetname="useHibernateTool">

<hibernatetool>

<!--指定资源搜索位置-->

<classpath>

<pathlocation="${source_folder_dir}"></path>

<pathlocation="bin"></path>

</classpath>

<!--指定Hibernate的配置文件-->

<configurationconfigurationfile="${source_folder_dir}/hibernate.cfg.xml"/>

<!--根据hbm生成java代码-->

<hbm2javajdk5="true"destdir="${source_folder_dir}"/>

<!--根据hbm生成databaseSchema-->

<hbm2ddldestdir="${database_schema_dir}"export="true"outputfilename="sqlStatement.sql"format="true"/>

</hibernatetool>

</target>

</project>

复制代码

build.properties文件:

source_folder_dir=src

reference_libs_dir=referencelibs

database_schema_dir=dbschema

复制代码

这是项目最开始的状态:

此时项目中仅仅只是定义了cfg和hbm文件,数据库schema和pojo都没有定义,"referencelibs"中存放的是该程序要成功需要的依赖库文件。运行Ant,此时项目的状态:

可以看到,我们的需要的pojo类和schema都生成好了,其实按照我的build.xml设置,数据库已经直接设置到了两张表了。验证器正确性:

Customer.hbm.xml:

<?xmlversion="1.0"encoding="utf-8"?>

<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<classname="com.beliefbetrayal.hibernate.pojos.Customer"table="customer">

<!--主键设置-->

<idname="id"type="string">

<columnname="id"></column>

<generatorclass="uuid"></generator>

</id>

<!--属性设置-->

<propertyname="username"column="username"type="string"></property>

<propertyname="balance"column="balance"type="integer"></property>

<setname="orders"inverse="true"cascade="all">

<keycolumn="customer_id"></key>

<one-to-manyclass="com.beliefbetrayal.hibernate.pojos.Order"/>

</set>

</class>

</hibernate-mapping>

复制代码

Customer.java

packagecom.beliefbetrayal.hibernate.pojos;

//Generated2012-2-81:10:59byHibernateTools3.3.0.GA

importjava.util.HashSet;

importjava.util.Set;

/**

*Customergeneratedbyhbm2java

*/

publicclassCustomerimplementsjava.io.Serializable{

privateStringid;

privateStringusername;

privateIntegerbalance;

privateSet<Order>orders=newHashSet<Order>(0);

publicCustomer(){

}

publicCustomer(Stringusername,Integerbalance,Set<Order>orders){

this.username=username;

this.balance=balance;

this.orders=orders;

}

publicStringgetId(){

returnthis.id;

}

publicvoidsetId(Stringid){

this.id=id;

}

publicStringgetUsername(){

returnthis.username;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicIntegergetBalance(){

returnthis.balance;

}

publicvoidsetBalance(Integerbalance){

this.balance=balance;

}

publicSet<Order>getOrders(){

returnthis.orders;

}

publicvoidsetOrders(Set<Order>orders){

this.orders=orders;

}

}

复制代码

可以看到,我们借助Ant生成的POJO完全没问题。看看数据库Schema:

createtablecustomer(

idvarchar(255)notnull,

usernamevarchar(255),

balanceinteger,

primarykey(id)

);

createtableorders(

idvarchar(255)notnull,

orderNumbervarchar(255),

costinteger,

customer_idvarchar(255),

primarykey(id)

);

altertableorders

addindexFKC3DF62E51E0069B1(customer_id),

addconstraintFKC3DF62E51E0069B1

foreignkey(customer_id)

referencescustomer(id);

来自:http://www.cnblogs.com/beliefbetrayal/archive/2012/02/08/2342137.html

相关推荐