<!DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN"
<abatorConfiguration>
<abatorContext>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ibatis" userId="Allen"
password="Allen">
<classPathEntry
location="lib/mysql-connector-java-3.1.5-gamma-bin.jar" />
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="com.etong.test.daomain"
targetProject=".. estsrcmainjava">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="."
targetProject=".. estsrcmain esources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<daoGenerator type="SPRING" targetPackage="com.etong.test.dao"
targetProject=".. estsrcmainjava">
<property name="enableSubPackages" value="true" />
</daoGenerator>
<table schema="ibatis" tableName="ibatis">
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="ORACLE"
identity="true" />
<columnOverride column="id" property="id" />
<columnOverride column="name" property="name" />
</table>
</abatorContext>
</abatorConfiguration>
配置完這個xml文件以后,下面就可以開始自動自成iBatis的相關(guān)文件了,有三種方法可供選擇,具體做法如下:
一、 在配置文件上點(diǎn)擊右鍵,選擇 “Generate iBatis Artifacts”,即可生成所有的java文件以及sqlmap配置文件等等,但這種方式在Eclipse中需要先運(yùn)行abator這個程序,所以不太好用,不建議使用。
二、 使用Ant來構(gòu)建,Ant配置文件如下所示:
<?xml version="1.0" encoding="GBK"?>
<!--
作者:Allen
create date: 2007-08-20
-->
<project name="test" default="compile" basedir=".">
<!-- properies 源文件夾 -->
<property name="src.dir" value="src/main/java" />
<property name="main.resource.dir" value="src/main/resources" />
<property name="junitsrc.dir" value="src/test/java" />
<property name="junitsrc.resource.dir" value="src/test/resources" />
<property name="generated.source.dir" value="${basedir}" />
<!--temporary build directory names 編譯及引用類庫文件夾 -->
<property name="classes.dir" value="target/classes" />
<property name="lib.dir" value="lib" />
<property name="dist.dir" value="dist" />
<property name="doc.dir" value="doc" />
<!-- 單元測試和Todo報告文件夾 -->
<property name="junit.dir" value="junit" />
<property name="report.main.dir" value="report/main" />
<property name="report.test.dir" value="report/test" />
<!-- 定義classpath -->
<path id="master-classpath">
<!-- 替換如下方式 <fileset file="${lib.dir}/*.jar" /> -->
<!--
也可以寫成如下方式,此方式同上面方式基本一致,這種方式可以通過include來限定
導(dǎo)入的類庫,如果不限定即可使用通配符**/*來替代!
-->
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
<pathelement path="${classes.dir}" />
</path>
<!-- 初始化開始任務(wù) -->
<target name="init">
<mkdir dir="${src.dir}" />
<mkdir dir="${main.resource.dir}" />
<mkdir dir="${junitsrc.dir}" />
<mkdir dir="${junitsrc.resource.dir}" />
<mkdir dir="${classes.dir}" />
<mkdir dir="${lib.dir}" />
<mkdir dir="${dist.dir}" />
</target>
<!-- 清除任務(wù) -->
<target name="clean">
<delete dir="${classes.dir}" />
</target>
<!-- 清除所有任務(wù) -->
<target name="cleanAll" depends="clean">
<delete dir="${src.dir}" />
<delete dir="${main.resource.dir}" />
<delete dir="${junitsrc.dir}" />
<delete dir="${junitsrc.resource.dir}" />
<delete dir="${dist.dir}" />
<delete dir="${doc.dir}" />
<delete dir="${junit.dir}" />
<delete dir="${report.main.dir}" />
<delete dir="${report.test.dir}" />
</target>
<!-- =================================
target: prepart 記錄構(gòu)建時間
================================= -->
<target name="prepart" depends="init" description="create the build dirdctories prior to a compile">
<tstamp>
<format property="now" pattern="MMMM d yyyy hh:mm aa" />
<format property="hour_earlier" pattern="MMMM d yyyy hh:mm aa" offset="-1" unit="hour" />
<format property="minute_later" pattern="MMMM d yyyy hh:mm aa" offset="1" unit="minute" />
</tstamp>
<echo>now=${now}</echo>
</target>
<!-- 編譯 -->
<target name="compile" depends="prepart" description="compile the source files">
<javac srcdir="${src.dir}:${junitsrc.dir}" destdir="${classes.dir}" target="1.4">
<classpath refid="master-classpath" />
</javac>
<copy todir="${classes.dir}">
<fileset dir="${main.resource.dir}" includes="**/*.properties" />
<fileset dir="${main.resource.dir}" includes="**/*.xml" />
<!-- copy the primary program and modules -->
<fileset dir="${junitsrc.resource.dir}" includes="*.properties" />
<fileset dir="${junitsrc.resource.dir}" includes="**/*.xml" />
</copy>
</target>
<!-- 生成ToDo報告,這個target依賴的庫有
commons-collections-2.1.jar
commons-logging.jar
-->
<target name="todo" depends="init">
<mkdir dir="${report.main.dir}" />
<mkdir dir="${report.test.dir}" />
<docdoclet destdir="${report.main.dir}">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
<info />
</docdoclet>
<docdoclet destdir="${report.test.dir}">
<fileset dir="${junitsrc.dir}">
<include name="**/*.java" />
</fileset>
<info />
</docdoclet>
</target>
<!-- 單元測試 -->
<target name="junit" depends="compile" description="run junit test">
<mkdir dir="${junit.dir}" />
<junit printsummary="on" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
<classpath refid="master-classpath" />
<formatter type="plain" />
<batchtest todir="${junit.dir}">
<fileset dir="${classes.dir}">
<include name="**/*Test.*" />
</fileset>
</batchtest>
</junit>
<fail if="tests.failed">
***********************************************************
**** One or more tests failed! Check the output ... ****
***********************************************************
</fail>
</target>
<!-- 打包成jar -->
<target name="jar" depends="compile" description="make .jar file">
<delete file="${dist.dir}/${ant.project.name}.jar">
</delete>
<jar jarfile="${dist.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<exclude name="**/*Test.*" />
<exclude name="**/Test*.*" />
</jar>
</target>
<target name="rebuild" depends="clean,init,compile,jar">
</target>
<!-- 輸出api文檔 -->
<target name="doc" depends="jar" description="create api doc">
<mkdir dir="${doc.dir}" />
<javadoc destdir="${doc.dir}" author="true" version="true" use="true" windowtitle="Test API">
<packageset dir="${src.dir}" defaultexcludes="yes">
<include name="*/**" />
</packageset>
<doctitle>
<![CDATA[<h1>Hello, test</h1>]]></doctitle>
<bottom>
<![CDATA[<i>All Rights Reserved.</i>]]></bottom>
<tag name="todo" scope="all" description="To do:" />
</javadoc>
</target>
<!-- 自動生成iBatis相關(guān)代碼和sqlMap配置文件-->
<target name="genfiles" description="Generate the files">
<taskdef name="abator" classname="org.apache.ibatis.abator.ant.AbatorAntTask" classpath="${lib.dir}/abator.jar" />
<abator overwrite="true" configfile="${main.resource.dir}/abatorConfig.xml" verbose="false">
<propertyset>
<propertyref name="${generated.source.dir}" />
</propertyset>
</abator>
</target>
</project>
然后運(yùn)行“genfiles”此任務(wù)即可看到生成的java代碼以及sqlMap的配置文件(此方法推薦)。
三、 可以使用java類來自動生成,類代碼內(nèi)容如下:
package com.etong.test.test;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.abator.api.Abator;
import org.apache.ibatis.abator.config.AbatorConfiguration;
import org.apache.ibatis.abator.config.xml.AbatorConfigurationParser;
import org.apache.ibatis.abator.exception.InvalidConfigurationException;
import org.apache.ibatis.abator.exception.XMLParserException;
import org.apache.ibatis.abator.internal.DefaultShellCallback;
public class TestClient ...{
public static void main(String[] args) ...{
List warnings = new ArrayList(); // Abator will add Strings to this
// list
boolean overwrite = true;
File configFile = new File("abatorConfig.xml");
AbatorConfigurationParser cp = new AbatorConfigurationParser(warnings);
AbatorConfiguration config = null;
try ...{
config = cp.parseAbatorConfiguration(configFile);
} catch (IOException e1) ...{
e1.printStackTrace();
} catch (XMLParserException e1) ...{
e1.printStackTrace();
}
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
Abator abator = new Abator(config, callback, warnings);
try ...{
abator.generate(null);
} catch (InvalidConfigurationException e) ...{
e.printStackTrace();
} catch (SQLException e) ...{
e.printStackTrace();
} catch (IOException e) ...{
e.printStackTrace();
} catch (InterruptedException e) ...{
e.printStackTrace();
}
}
}
最后運(yùn)行此類即可看到生成的文件!