使用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