1. 程式人生 > >Abator —— IBatis 程式碼生成工具

Abator —— IBatis 程式碼生成工具

對於IBatis應用最煩人的重複工作就是不停的寫DAO,DTO,和xml檔案裡面的sqlmap,其實很多時候這些工作是重複而且無聊的。好在我們還有abator (http://ibatis.apache.org/abator.html ),一個IBatis自動生成工具,他可以幫助你生成大量的DAO,DTO和sqlmap。
如果你使用eclipse作為IDE那麼事情就很簡單了(相信沒有幾個人不在用):
安裝Eclipse外掛
1. 要求eclipse3.1,jdk1.4以上
2. 在eclipse上安裝abator外掛
eclipse選單欄 –> help –> Software Updates –> Find And Install…
在彈出的對話方塊中選擇 “Search for new features to install” 然後點選 “next”
在對話方塊中點選按鈕 New Remort Site… 在彈出的對話方塊中的URL輸入框中填寫

http://ibatis.apache.org/tools/abator ,Name輸入框就隨便寫些什麼了。
點選Finish,安裝外掛,然後重新啟動eclipse

下面測試一下功能
1. 新建一個java工程
2. 在eclipse選單欄中興建一個 abator 配置檔案
File –> Abator for iBatis Configration File

好的,我們完成了建立配置檔案,下面打abator配置檔案,看看裡面怎麼去配置
開啟後內容基本上是這樣

xml 程式碼

 <?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPE abatorConfiguration PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN" <abatorContext><!-- TODO: Add Database Connection Information --> <jdbcConnectiondriverClass="???" <classPathEntrylocation="???"/> <javaModelGeneratortargetPackage="???"targetProject="???"
/>
<sqlMapGeneratortargetPackage="???"targetProject="???"/> <daoGenerator="IBATIS"targetPackage="???"targetProject="???"/> <tableschema="???"tableName="???"> <columnOverridecolumn="???"property="???"/> </abatorConfiguration>

你需要做的是替換一些???:
1. 填寫driverClass(jdbc驅動,例如oracle的就是oracle.jdbc.driver.OracleDriver)
2. 填寫connectionURL(連線字串,例如oracle的就是jdbc:oracle:thin:@192.168.0.246:1521:test)
3. 填寫classPathEntry的location(jdbc驅動jar包的位置,例如E:/project/ibatistest/WebContent/WEB-INF/lib/ojdbc14.jar)
4. 填寫javaModelGenerator,生成的DTO(java model 類)
targetPackage:目標包的位置,如 com.test.dto
targetProject:目標工程名稱,填寫配置檔案所在的eclipse工程名
5. 填寫sqlMapGenerator ,生成的xml sqlmap的相關配置
targetPackage:目標位置,如 com.test.sqlmap
targetProject:目標工程名稱,填寫配置檔案所在的eclipse工程名
6. 填寫daoGenerator ,生成的DAO的相關配置
type:生成的dao實現的型別,如果你使用spring的話寫SPRING,否則寫IBATIS
targetPackage:目標位置,如 com.test.dao
targetProject:目標工程名稱,填寫配置檔案所在的eclipse工程名
7. 配置相關資料庫的表
schema:資料庫schema,oracle就是填寫資料庫的使用者名稱
tableName:表名

xml 程式碼

<columnOverridecolumn="???"property="???"/>
 可以先不用配置,刪除就可以了

下面開始生成:
在配置檔案上點解右鍵,選擇 “Generate iBatis Artifacts”
OK,看看生成了什麼吧!

我用的是命令列方式(沒用過eclipse外掛):
java -cp lib/abator.jar org.apache.ibatis.abator.api.AbatorRunner -configfile abator.xml -overwrite

看看我的配置:

<?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE abatorConfiguration     PUBLIC "-//Apache Software Foundation//DTD Abator for iBATIS Configuration 1.0//EN"     <abatorConfiguration>       <abatorContext id="mssql" generatorSet="Java5">           <jdbcConnection driverClass="net.sourceforge.jtds.jdbc.Driver"            connectionURL="jdbc:jtds:sqlserver://127.0.0.1:1433/db" userId="user" password="password">               <classPathEntry location="lib/jtds-1.2.jar"/>           </jdbcConnection>           <javaTypeResolver>               <property name="forceBigDecimals" value="false"/>           </javaTypeResolver>           <javaModelGenerator                targetPackage="persistence.model" targetProject="..\project\src\main\java\">               &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;property name="enableSubPackages" value="true"/>               <property name="trimStrings" value="true"/>           </javaModelGenerator>           <sqlMapGenerator                targetPackage="." targetProject="..\project\src\main\resources\">               &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;property name="enableSubPackages" value="true"/>           </sqlMapGenerator>           <daoGenerator type="SPRING"            targetPackage="persistence.dao" targetProject="..\project\src\main\java\">               &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;property name="enableSubPackages" value="true"/>           </daoGenerator>           <table schema="dbo" tableName="%">               <property name="useActualColumnNames" value="true"/>               <!-- 簡寫配置檔案,省略發下面註解的寫法,生成檔案時會顯示警告資訊,忽略之 -->               <generatedKey column="ID" sqlStatement="SqlServer" identity="true"/>           </table>       </abatorContext>   </abatorConfiguration>  
我們對Abator進行

我們對Abator進行了定製修改,他生成的Critia比較好,我最喜歡.
只可惜類結構不太好,它是把他放在一個Example類裡面的,我覺得應該可以定製這個類名.
另外好像還有一個bug,當你在Example裡面呼叫createCritia之後,如果你沒有給critia設定任何條件.最後生成的sql語句where子句後就沒有條件,資料庫自然會報錯.