成都心情

  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  98 随笔 :: 2 文章 :: 501 评论 :: 1 Trackbacks

    今年年初,有幸接触到了 iBATIS,并花了数个星期来写了点使用心得(http://www.blogjava.net/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 file


public 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.blogjava.net/rosen

posted on 2005-08-12 15:12 Rosen 阅读(2843) 评论(0)  编辑  收藏 所属分类: O/R Mapping

只有注册用户登录后才能发表评论。


网站导航: