今年年初,有幸接觸到了 iBATIS,并花了數個星期來寫了點使用心得(http://www.tkk7.com/rosen/archive/2005/08/12/9931.html)。半年多過去,iBATIS 發生了很大的變化,2005 年 5月 1 日,iBATIS 孵化成功,今天已正式成為 Apache 官方項目, http://www.ibatis.com 域名已重定向到 http://ibatis.apache.org。說說變化吧,iBATIS 產品系列中,iBATIS SQL Maps 更名為 iBATIS Data Mapper 分為 for .NET 和 for Java 兩個版本;iBATIS DAO 的名稱未變,在原有 for Java 的基礎上增加了 for .NET 版本;當然最后還包括官方的 iBATIS PetStore 范例。 目前 iBATIS Data Mapper for Java(以下簡稱:iBATIS Data Mapper)的版本為 2.1.5。當前以及未來的 iBATIS Data Mapper 將加入以下新特征。 來自第三方的貢獻 Alex Egorov 的 SQL Map 生成器(http://alxeg.narod.ru/ibatis/index.html)。Alex 創建了一些便利的腳本來生成你所有的 SQL Maps 和 VO。如果你正在尋找這種快速開發工具,它將是個可以一試的工具。這個站點有點慢,但是這點等待總比你手工編碼的時間來得快。 DDL如下:
CREATE TABLE USER_PROPERTY ( USER_ID BIGINT NOT NULL, FIRST_NAME VARCHAR(100) DEFAULT '', LAST_NAME VARCHAR(100), BIRTH_DATE TIMESTAMP(8), PRIMARY KEY (USER_ID));
VO如下:
package org.mystuff.db;// WARNING: This is an autogenerated filepublic class UserProperty { // Constructors public UserProperty() { } public UserProperty(long _userId) { this.userId = _userId; } // Fields private String firstName; public String getFirstName() { return firstName; } public void setFirstName(String _firstName) { this.firstName = _firstName; } private java.util.Date birthDate; public java.util.Date getBirthDate() { return birthDate; } public void setBirthDate(java.util.Date _birthDate) { this.birthDate = _birthDate; } private String lastName; public String getLastName() { return lastName; } public void setLastName(String _lastName) { this.lastName = _lastName; } private long userId; public long getUserId() { return userId; } public void setUserId(long _userId) { this.userId = _userId; }}
映射文件如下:
<?xml version='1.0'?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <!-- WARNING: This is an autogenerated file --> <sqlMap name="UserProperty"> <cacheModel id="userproperty-cache" type="MEMORY"> <flushInterval hours="24"/> <flushOnExecute statement="insertUserProperty"/> <flushOnExecute statement="updateUserProperty"/> <flushOnExecute statement="deleteUserProperty"/> <property name="reference-type" value="WEAK" /> </cacheModel> <resultMap class="org.mystuff.db.UserProperty" id="userproperty-result" > <result property="firstName" column="FIRST_NAME" /> <result property="birthDate" column="BIRTH_DATE" /> <result property="lastName" column="LAST_NAME" /> <result property="userId" column="USER_ID" /> </resultMap> <select id="getUserProperty" resultClass="org.mystuff.db.UserProperty"
parameterClass="org.mystuff.db.UserProperty" resultMap="userproperty-result" > <![CDATA[ select * from USER_PROPERTY where USER_ID = #userId# ]]> </select> <update id="updateUserProperty" parameterClass="org.mystuff.db.UserProperty"> <![CDATA[ update USER_PROPERTY set FIRST_NAME = #firstName# , BIRTH_DATE = #birthDate#
, LAST_NAME = #lastName# where USER_ID = #userId# ]]> </update> <insert id="insertUserProperty" parameterClass="org.mystuff.db.UserProperty"> <![CDATA[ insert into USER_PROPERTY(FIRST_NAME, BIRTH_DATE, LAST_NAME, USER_ID) values(#firstName#, #birthDate#, #lastName#, #userId#) ]]> </insert> <delete id="deleteUserProperty" parameterClass="org.mystuff.db.UserProperty"> <![CDATA[ delete from USER_PROPERTY where USER_ID = #userId# ]]> </delete> </sqlMap>
Jasmine IDE iBATIS GUI(http://jasmineide.sourceforge.net)。在構建映射文件、VO、DAO 類(不是 iBATIS 的 DAO,而是一個調用 sqlclient 方法的 java 類)方面這是最好的了,通過點擊幾下鼠標就可生成。這個工具允許你建立一個項目并設置 DB 連接連同所有通常用到的配置文件。(首先你需要設置自己的 DB 連接,確定你的驅動程序和所有 jar 都在系統類路徑中)
我想,隨著時間的推移,會有更多的開發者加入為 iBATIS 添磚加瓦的行列。 重要改進議題 http://wiki.apache.org/ibatis/Improved_Dynamic_SQL_Whiteboard 這里正在討論關于改進動態 SQL 的白板,讓 iBATIS Data Mapper 在動態 SQL 方面更強大。另外,當開發某個有著大量查詢和大量數據的系統時,通常也會對這些數據的子集進行開發。“記錄長時間運行的查詢”功能將加快開發進度,能幫助開發者或 DBA 了解哪個查詢慢或尚未優化,找出潛在瓶頸。為了引入這種新特性,也許會修改 sqlmap 配置文件(比如默認臨界值),也會在 mapped statement 中增加新屬性(用來覆蓋默認臨界值)。請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:http://www.tkk7.com/rosen
Powered by: BlogJava Copyright © Rosen