通过Ant控制Hibernate操作数据库

      本文通过Ant扩展Hibernate的发布数据库功能。具体实现功能包括:根据Hibernate的配置文件创建数据库表结构、清空表中数据、加载预定义的数据、更新表结构。
  一、配置分析
    
1.         Ant运行配置文件(注释:${name}写法为build.properties文件中定义)
    
<project name="JH.DeployDB" basedir="." default="create.db.oracleDB">
    
<!--项目简介-->
    
<description>发布数据库</description>

    <!--导入build.properties属性文件中的属性值-->
    
<propertyfile="build.properties"/>

    <!-- ================= -->
    
<!-- ===加载数据包与类=== -->
    
<!-- ================= -->
    
<pathid="classpath.ant">
        
<!--文件集lib -->
        
<filesetdir="lib"includes="**/*.jar"/>
        
<!-- 加载编译类(class文件) -->
        
<pathelementpath="bin"/>
        
<pathelementpath="bin/com/jihong/db"/>
    
</path>

    
<!-- ================= -->
    
<!-- =创建数据库中的数据= -->
    
<!-- ================= -->
    
<targetname="create.db.oracleDB" depends="declare.jbpm.tasks" description="发布Oracle数据库">
        
<!-- 数据库创建表 actions:命令 cfg:hibernate配置文件 propertieshibernate配置文件-->
        
<jbpmschema actions="create" cfg="${config.hibernate}" properties="${config.hibernate.properties}"/>
        
<!-- 加载xml中的数据 file:加载xml文件的位置 cleartable:要清空的表名之间用,分割 -->
        
<loadmodel file="${config.db}" cfg="${config.hibernate}" properties="${config.hibernate.properties}"
        cleartable="LaspTable"/>
    
</target>
    
    
<!-- ================= -->
    
<!-- =清空数据库中的数据= -->
    
<!-- ================= -->
    
<target name="clean.db.oracleDB" depends="declare.jbpm.tasks" description="发布Oracle数据库">
        
<jbpmschema actions="clean" cfg="${config.hibernate}" properties="${config.hibernate.properties}"/>
    
</target>

    <!-- ================= -->
    
<!-- =更新数据库中的数据= -->
    
<!-- ================= -->
    
<target name="update.db.oracleDB" depends="declare.jbpm.tasks" description="发布Oracle数据库">
        
<!-- 数据库创建表 -->
        
<jbpmschema actions="update" cfg="${config.hibernate}" properties="${config.hibernate.properties}"/>
        
<loadmodel file="${config.db}" cfg="${config.hibernate}" properties="${config.hibernate.properties}" />
    
</target>

    <!-- ================= -->    
    <!-- ==加载数据到oracle= -->
    <!-- ================= -->    
    
<target name="load.db.oracleDB" depends="declare.jbpm.tasks" description="加载数据到Oracle数据库">
        
<!-- clearTable:清空的表名已,分割 -->
        
<loadmodel file="${config.db}" cfg="${config.hibernate}" properties="${config.hibernate.properties}"
        clearTable="LaspTable"/>
    
</target>

    <!-- ================= -->
    
<!-- 加载自定义Ant标签   -->
    
<!-- ================= -->
    
<target name="declare.jbpm.tasks">
        
<taskdef file="${config.ant.tasks}" format="properties">
            
<classpath refid="classpath.ant"/>
        
</taskdef>
    
</target>
</project>
  2.Ant配置文件build.properties如下:

#hibernate config
config.hibernate=${basedir}/config/hibernate.cfg.xml
#hibernate properties
config.hibernate.properties=${basedir}/config/create.db.hibernate.properties
#Ant的自定义标签
config.ant.tasks =config/jbpm.ant.tasks.properties
#载入的xml数据位置
config.db=${basedir}/config/LoadDB.xml

    3.Ant自定义配置标签文件jbpm.ant.tasks.properties代码如下:
        jbpmschema=com.jihong.ant.JbpmSchemaTask
           loadmodel=com.jihong.ant.LoadModel
    二、代码分析
        首先建立一个源代码文件夹(如:src/com.jihong.hibernate)用于存放hibernate位置文件.
        根据自定义的xml创建生成实体的类 实例如下:
        

<LoadDB>
    
<Lasp CaseNo="第一"></Lasp>
    
<Lasp CaseNo="第二"></Lasp>
    
<Lasp CaseNo="第三"></Lasp>
    
<Lasp CaseNo="第四"></Lasp>
    
<Lasp CaseNo="第五"></Lasp>
    
<Lasp CaseNo="第六"></Lasp>
</LoadDB>

 

public class LaspTable implements Serializable {

    
private static final long serialVersionUID = 1L;

    
private String caseNo;// 案号
    
    
private long id;

    
public long getId() {
        
return id;
    }


    
public void setId(long id) {
        
this.id = id;
    }


    
/**
     * 得到案号
     * 
     * 
@return 返回 casetNo。
     
*/

    
public String getCaseNo() {
        
if (caseNo == null{
            
return "";
        }

        
return caseNo;
    }


    
/**
     * 设置案号
     * 
     * 
@param casetNo
     *            要设置的 casetNo。
     
*/

    
public void setCaseNo(String caseNo) {
        
this.caseNo = caseNo;
    }


}

 

/**
 * 生成Lasp数据
 
*/

package com.jihong.ant.db;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;

import com.jihong.ant.CreateModel;
import com.jihong.hibernate.model.LaspTable;

public class LaspCreateModel extends CreateModel {

    Map
<String, Object> entitiesMap = new HashMap<String, Object>();

    @Override
    
protected void addEntites(Document document) {
        Element jhRootElement 
= document.getRootElement();
        ReadLasp(jhRootElement.elements(
"Lasp"));
        entities.addAll(entitiesMap.values());
    }


    
private void ReadLasp(List laspList) {
        Iterator ite 
= laspList.iterator();
        
while (ite.hasNext()) {
            Element element 
= (Element) ite.next();
            
if (element != null{
                String caseNo 
= element.attributeValue("CaseNo");
                LaspTable laspTable 
= new LaspTable();
                laspTable.setCaseNo(caseNo);
                entitiesMap.put(caseNo, laspTable);
            }

        }

    }

}

(注:加入hibernate3.jar和Oracle的classes12.jar
    

posted @ 2008-05-08 10:26  清晖皓月  阅读(1228)  评论(0编辑  收藏  举报