<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
    主站蜘蛛池模板: 国产亚洲欧洲精品| 国产男女爽爽爽免费视频| 最近最新高清免费中文字幕 | 国产福利免费在线观看| 亚洲AV无码精品国产成人| 亚洲人成无码网站久久99热国产| 国产午夜精品久久久久免费视| 亚洲天堂电影在线观看| 亚洲乱码中文字幕综合234| 成人亚洲综合天堂| 99免费视频观看| 韩国亚洲伊人久久综合影院| 日韩一卡2卡3卡4卡新区亚洲 | 一级毛片免费一级直接观看| 亚洲三级在线视频| 亚洲AV无码之日韩精品| 久久这里只精品国产免费10| 亚洲人成未满十八禁网站| 亚洲人成色7777在线观看| 啦啦啦www免费视频| 国产成人免费视频| 一二三四在线观看免费中文在线观看| 日产亚洲一区二区三区| 亚洲色一色噜一噜噜噜| 日本在线高清免费爱做网站| 最近的2019免费中文字幕| 亚洲国产无线乱码在线观看 | 亚洲毛片无码专区亚洲乱| 国产一精品一aⅴ一免费| 99久久久国产精品免费无卡顿| 精品熟女少妇aⅴ免费久久 | 亚洲视频2020| 国产日韩成人亚洲丁香婷婷| 大香人蕉免费视频75| 无码专区AAAAAA免费视频| 亚洲视频在线免费| 国产精品无码亚洲精品2021| 亚洲一级片在线观看| 亚洲av无码专区在线播放| 99视频有精品视频免费观看| 四虎成人精品国产永久免费无码|