使用Ant自動(dòng)化發(fā)開Hibernate
在開發(fā)使用Hibernate框架應(yīng)用程序中,無外乎要?jiǎng)?chuàng)建hibernate.cfg.xml,xxx.hbm.xml,pojos和databaseSchema這些文件,框架這東西剛開始學(xué)會(huì)的時(shí)候,都是心情舒暢,熱情高漲,所有文件都是自己手寫不管這樣重復(fù)性的工作有多么的乏味,愛情都會(huì)由低潮期更別說重復(fù)Coding了,久而久之在編寫一個(gè)個(gè)xml、pojo和schema的過程中,不由從心中產(chǎn)生一種不舒暢之氣。
我曾經(jīng)有一段時(shí)間見到代碼文件就有想吐的沖動(dòng),不過還好我還是挺過來,嘛也就是像愛情麻木期一樣,怎么都無所謂了。直到最近了解到Ant這個(gè)工具,讓我看到了另一種發(fā)開Hibernate應(yīng)用程序的方式,并不是說這樣的開發(fā)方式就一定好于純手工編寫,適合自己才是***的,但我是一個(gè)比較愛偷懶的,自動(dòng)化構(gòu)建非常的吸引我。開頭字?jǐn)?shù)湊夠了就進(jìn)入正題了,首先直接上build.xml,這個(gè)文件是ant所需要的。
- <?xml version="1.0" encoding="UTF-8"?>
 - <project name="hibernatetools" basedir="." default="useHibernateTool">
 - <!-- 導(dǎo)入build.properties文件,該文件定義一些常量,這些常量也可以是用<property name="" value="">的形式定義 -->
 - <property file="build.properties"></property>
 - <!-- 定義依賴包所在的位置,"${reference_libs_dir}"表示引用名為"reference_libs_dir"的常量 -->
 - <path id="referencelib">
 - <fileset dir="${reference_libs_dir}">
 - <!-- 匹配模式,表示該目錄下所有jar文件 -->
 - <include name="**/*.jar"/>
 - </fileset>
 - </path>
 - <!-- 自定義Ant Task,但是使用的自定義類為Hibernate為我們提供的 -->
 - <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="referencelib"></taskdef>
 - <!-- 使用hibernatetool -->
 - <target name="useHibernateTool">
 - <hibernatetool>
 - <!-- 指定資源搜索位置 -->
 - <classpath>
 - <path location="${source_folder_dir}"></path>
 - <path location="bin"></path>
 - </classpath>
 - <!-- 指定Hibernate的配置文件 -->
 - <configuration configurationfile="${source_folder_dir}/hibernate.cfg.xml"/>
 - <!-- 根據(jù)hbm生成java代碼 -->
 - <hbm2java jdk5="true" destdir="${source_folder_dir}"/>
 - <!-- 根據(jù)hbm生成databaseSchema -->
 - <hbm2ddl destdir="${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
 
這是項(xiàng)目最開始的狀態(tài):

此時(shí)項(xiàng)目中僅僅只是定義了cfg和hbm文件,數(shù)據(jù)庫schema和pojo都沒有定義,"referencelibs"中存放的是該程序要成功需要的依賴庫文件。運(yùn)行Ant,此時(shí)項(xiàng)目的狀態(tài):

可以看到,我們的需要的pojo類和schema都生成好了,其實(shí)按照我的build.xml設(shè)置,數(shù)據(jù)庫已經(jīng)直接設(shè)置到了兩張表了。驗(yàn)證器正確性:
Customer.hbm.xml:
- <?xml version="1.0" encoding="utf-8"?>
 - <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 - <hibernate-mapping>
 - <class name="com.beliefbetrayal.hibernate.pojos.Customer" table="customer">
 - <!-- 主鍵設(shè)置 -->
 - <id name="id" type="string">
 - <column name="id"></column>
 - <generator class="uuid"></generator>
 - </id>
 - <!-- 屬性設(shè)置 -->
 - <property name="username" column="username" type="string"></property>
 - <property name="balance" column="balance" type="integer"></property>
 - <set name="orders" inverse="true" cascade="all">
 - <key column="customer_id" ></key>
 - <one-to-many class="com.beliefbetrayal.hibernate.pojos.Order"/>
 - </set>
 - </class>
 - </hibernate-mapping>
 
Customer.java
- package com.beliefbetrayal.hibernate.pojos;
 - // Generated 2012-2-8 1:10:59 by Hibernate Tools 3.3.0.GA
 - import java.util.HashSet;
 - import java.util.Set;
 - /**
 - * Customer generated by hbm2java
 - */
 - public class Customer implements java.io.Serializable {
 - private String id;
 - private String username;
 - private Integer balance;
 - private Set<Order> orders = new HashSet<Order>(0);
 - public Customer() {
 - }
 - public Customer(String username, Integer balance, Set<Order> orders) {
 - this.username = username;
 - this.balance = balance;
 - this.orders = orders;
 - }
 - public String getId() {
 - return this.id;
 - }
 - public void setId(String id) {
 - this.id = id;
 - }
 - public String getUsername() {
 - return this.username;
 - }
 - public void setUsername(String username) {
 - this.username = username;
 - }
 - public Integer getBalance() {
 - return this.balance;
 - }
 - public void setBalance(Integer balance) {
 - this.balance = balance;
 - }
 - public Set<Order> getOrders() {
 - return this.orders;
 - }
 - public void setOrders(Set<Order> orders) {
 - this.orders = orders;
 - }
 - }
 
可以看到,我們借助Ant生成的POJO完全沒問題。看看數(shù)據(jù)庫Schema:
- create table customer (
 - id varchar(255) not null,
 - username varchar(255),
 - balance integer,
 - primary key (id)
 - );
 - create table orders (
 - id varchar(255) not null,
 - orderNumber varchar(255),
 - cost integer,
 - customer_id varchar(255),
 - primary key (id)
 - );
 - alter table orders
 - add index FKC3DF62E51E0069B1 (customer_id),
 - add constraint FKC3DF62E51E0069B1
 - foreign key (customer_id)
 - references customer (id);
 
使用Ant自動(dòng)化開發(fā)Hibernate需要hibernate-tools.jar包。我將項(xiàng)目整理了一下可以下載參考項(xiàng)目下載。
原文鏈接:http://www.cnblogs.com/beliefbetrayal/archive/2012/02/08/2342137.html
【編輯推薦】















 
 
 









 
 
 
 