通过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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值