<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102
     

    前段時間寫了些 Hibernate 方面的系列文章,網友們反映還不錯。在接下來的時間里,我將會引入另外一種 O/R Mapping 解決方案——iBATIS,本系列將沿用 Hibernate 系列文章的風格。

      

    什么是 iBATIS


        和眾多的
    SourceForge 開源項目一樣,iBATIS 曾經也是其中的一員。在2004113日成功地成為了 Apache Incubator 下的子項目。 iBATIS 包括 for Java for .NET 兩個版本,for Java 版提供了SQL Maps DAO 框架,for .NET 只提供了 SQL Maps 框架。從現在開始我們只對 for Java 版的SQL Maps 展開討論。

     

    你可以在 http://www.ibatis.com 下載 iBATIS for Java,目前最新版本是2.0.9,壓縮包里已經包含了 SQL Maps(ibatis-sqlmap-2.jar) DAO 框架(ibatis-dao-2.jar)


    為什么選擇 iBATIS


        也許各位看官已在各種不同的技術資料上了解到它的優勢。但是對于我來說,選擇它的理由只有一個
    ——“利用原有資源Hibernate 的卻優秀,但是用來整合原有系統,它卻很難勝任。例如,以前在進行數據建模時使用了復合主鍵、跨越多表產生的幾十甚至上百行的查詢語句、利用原有存儲過程… … 當面臨這一系列問題時 Hibernate 就顯得力不從心了,要想使用 Hibernate就只能改造原有系統!

     

    當我面臨系統整合問題時(整合的要求很簡單:只需要保留原有系統查詢部分),iBATIS 進入了我的視線。原有系統中除 SQL語句需要小小的修改外,數據表、查詢結果都不需要改變!也不用像 Hibernate 那樣映射出眾多的配置文件、POJO,一下子清爽了很多。BTWHibernate 這種做法沒有錯!只是我只需要查詢功能,僅僅是取我所好而已,避免了殺雞用牛刀。

     

    目前,系統整合已經結束,花了一個月時間。如果使用 Hibernate,恐怕我現在還在為怎么設計數據表、怎樣下HQL而和同事爭論。

     

    開始另一次 O/R Mapping 之旅


        上次
    O/R Mapping 之旅的 BO、數據表還可以重用,只是把數據庫遷移到了 MySQL打開 Eclipse,新建一個 Resin 項目。把 ibatis-sqlmap-2.jar ibatis-common-2.jar 拷貝到 lib 目錄下,再導入項目。和 Hibernate 自動配置、自動映射相比,iBATIS 的一切都是手工完成的。

       

        src 下建立配置文件 SqlMapConfig.xml,數據庫鏈接、連接池、SqlMap 映射文件… … 這些都要靠它了。官方參考手冊對怎樣進行設置有很詳細的描述,我只對要用到的地方進行粗略說明。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE sqlMapConfig
        PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
        "
    http://www.ibatis.com/dtd/sql-map-config-2.dtd">

    <sqlMapConfig>

      <settings
        cacheModelsEnabled="true"
        enhancementEnabled="true"
        lazyLoadingEnabled="true"
        errorTracingEnabled="false"
        maxRequests="32"
        maxSessions="10"
        maxTransactions="5"
        useStatementNamespaces="false"
        />

      <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
          <property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver"/>
          <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/new_db?useUnicode=true"/>
          <property name="JDBC.Username" value="root"/>
          <property name="JDBC.Password" value=""/>
          <property name="JDBC.DefaultAutoCommit" value="true"/>
          <property name="Pool.MaximumActiveConnections" value="10"/>
          <property name="Pool.MaximumIdleConnections" value="5"/>
          <property name="Pool.MaximumCheckoutTime" value="120000"/>
          <property name="Pool.TimeToWait" value="500"/>
          <property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>
          <property name="Pool.PingEnabled" value="false"/>
          <property name="Pool.PingConnectionsOlderThan" value="1"/>
          <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
          <property name="Pool.QuietMode" value="true"/>
        </dataSource>
      </transactionManager>

      <sqlMap resource="bo/mapping/AutoMag.xml"/>
    </sqlMapConfig>


    transactionManager
    元素定義了 iBATIS 事務管理器。type 可選項包括: 

    JDBC:通過傳統 JDBC 來管理事務。

    JTA:使用一個 JTA 全局事務,使 iBATIS 的事務包括在更大的事務范圍內(跨數據庫Session的),這個更大的事務范圍可能包括了其他的數據庫和事務資源。這個配置需要一個 UserTransaction 屬性,以便從 JNDI 獲得一個 UserTransaction 

    EXTERNAL:調用 iBATIS 以外的其他事務管理器來管理事務。

     

    dataSource 元素是 transactionManager 的一部分。type 可選項包括:

       
    SIMPLESIMPLE iBATIS 內置的 dataSource 實現,其中實現了一個簡單的數據庫連接池,當無容器提供 DataSource 服務時可以使用該選項,對應 iBATIS 實現類為com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory

    ?    DBCP:基于 Apache DBCP 連接池 API 實現的 DataSource,當無容器提供 DataSource 服務時,可以使用該選項,對應 iBATIS 實現類為 com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory

    ?JNDI:使用 J2EE 容器提供的 DataSource 實現,DataSource 將通過指定的 JNDI Name 從容器中獲取。對應 iBATIS 實現類為 com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory

        注意!每種 dataSource 元素的 property 都有不同的地方,不能光把 type 名字改了了事。

     

    sqlMap 元素定義了映射文件的存放位置,配置文件中可包含多個 sqlMap 元素,比如:

    <sqlMap resource="mapping/AutoMag1.xml"/>
    <sqlMap resource="bo/mapping/AutoMag2.xml"/>

    <sqlMap url="file:///c:/eclipse/workspace/iBATISTest/src/bo/ AutoMag2.xml "/>
    … …

    你也許已發現,我只定義了單個映射文件。不錯,和 Hibernate 的一個表一個映射文件不同,iBATIS 的映射文件個數可以人為控制,顆粒度自己掌握。

     

        光有 BO 和配置文件還不行,還要為本次測試創建測試類 AutoMag.java。完整的布局如下所示:

                                            


        以下為 iBATIS SQL Maps 工作流程,對于理解概念很有幫助。大意是 1、你可以把 JavaBean、Map 類型、原始變量(或者它們的Wrapper Class)、XML 數據作為傳入對象;2、通過配置文件載入映射文件;3、利用框架翻譯成 JDBC 來訪問數據庫;4、執行結果可以是 JavaBean、Map 類型、原始變量(或者它們的Wrapper Class)、XML 數據。
                           
           

    (請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:http://blog.csdn.net/rosen

    Feedback

    # re: iBATIS SQL Maps(一) 選擇自 rosen 的 Blog   回復  更多評論   

    2005-08-07 14:53 by df
    hao,very good

    # re: iBATIS SQL Maps(一) 選擇自 rosen 的 Blog   回復  更多評論   

    2005-09-01 18:18 by licongming
    good
    主站蜘蛛池模板: 国产亚洲精品福利在线无卡一| 四虎亚洲精品高清在线观看| 欧洲一级毛片免费| 亚洲成a人无码亚洲成av无码| 亚洲国产精品一区二区三区久久| 久久国产精品免费观看| 亚洲欧美aⅴ在线资源| 亚洲开心婷婷中文字幕| 成人在线视频免费| 麻豆精品成人免费国产片| 亚洲av日韩av永久无码电影| 亚洲好看的理论片电影| 四虎精品亚洲一区二区三区| 久久www免费人成看片| 一二三区免费视频| 亚洲色大成网站www| 亚洲AV综合色一区二区三区| 国产无遮挡吃胸膜奶免费看| 蜜臀AV免费一区二区三区| xxxxx做受大片视频免费| 亚洲依依成人亚洲社区| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲AⅤ永久无码精品AA| 国产免费看JIZZ视频| 精品一区二区三区免费| 男女猛烈无遮掩视频免费软件| 亚洲一级毛片在线观| 亚洲高清视频在线观看| 亚洲综合另类小说色区色噜噜| 处破痛哭A√18成年片免费| 免费视频成人片在线观看| 在线免费观看a级片| 一区二区三区观看免费中文视频在线播放 | 男女猛烈xx00免费视频试看| 久久久久亚洲av无码专区导航| 国产成人亚洲综合无码| 国产成人无码区免费A∨视频网站| 亚洲视频免费一区| 免费av一区二区三区| 久久国产精品免费一区| 日韩一级片免费观看|