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

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

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

    [轉(zhuǎn)]iBATIS SQL Maps

    自:http://www.codesky.net/article/doc/200412/2004121597969923.htm
    什么是
    iBATIS


    ??? 和眾多的
    SourceForge 開源項(xiàng)目一樣, iBATIS 曾經(jīng)也是其中的一員。在 2004 11 3 日成功地成為了 Apache Incubator 下的子項(xiàng)目。 iBATIS 包括 for Java for .NET 兩個(gè)版本, for Java 版提供了 SQL Maps DAO 框架, for .NET 只提供了 SQL Maps 框架。從現(xiàn)在開始我們只對 for Java 版的 SQL Maps 展開討論。

    ?

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


    為什么選擇 iBATIS


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

    ?

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

    ?

    目前,系統(tǒng)整合已經(jīng)結(jié)束,花了一個(gè)月時(shí)間。如果使用 Hibernate ,恐怕我現(xiàn)在還在為怎么設(shè)計(jì)數(shù)據(jù)表、怎樣下 HQL 而和同事爭論。

    ?

    開始另一次 O/R Mapping 之旅


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

    ???

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

    <?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 事務(wù)管理器。 type 可選項(xiàng)包括: ?

    JDBC :通過傳統(tǒng) JDBC 來管理事務(wù)。

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

    EXTERNAL :調(diào)用 iBATIS 以外的其他事務(wù)管理器來管理事務(wù)。

    ?

    dataSource 元素是 transactionManager 的一部分。 type 可選項(xiàng)包括:

    ???
    SIMPLE SIMPLE iBATIS 內(nèi)置的 dataSource 實(shí)現(xiàn),其中實(shí)現(xiàn)了一個(gè)簡單的數(shù)據(jù)庫連接池,當(dāng)無容器提供 DataSource 服務(wù)時(shí)可以使用該選項(xiàng),對應(yīng) iBATIS 實(shí)現(xiàn)類為 com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory

    ???? DBCP: 基于 Apache DBCP 連接池 API 實(shí)現(xiàn)的 DataSource ,當(dāng)無容器提供 DataSource 服務(wù)時(shí),可以使用該選項(xiàng),對應(yīng) iBATIS 實(shí)現(xiàn)類為 com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory

    ?JNDI :使用 J2EE 容器提供的 DataSource 實(shí)現(xiàn), DataSource 將通過指定的 JNDI Name 從容器中獲取。對應(yīng) iBATIS 實(shí)現(xiàn)類為 com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory

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

    ?

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

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

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

    你也許已發(fā)現(xiàn),我只定義了單個(gè)映射文件。不錯(cuò),和 Hibernate 的一個(gè)表一個(gè)映射文件不同, iBATIS 的映射文件個(gè)數(shù)可以人為控制,顆粒度自己掌握。

    ?

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

    ????????????????????????????????????????


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

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

    posted on 2006-03-22 11:25 扭轉(zhuǎn)乾坤 閱讀(205) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆分類(31)

    隨筆檔案(30)

    文章分類(32)

    文章檔案(33)

    相冊

    PHP小站-首頁

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产亚洲精品国产福利在线观看| 国产日韩亚洲大尺度高清| 女人18毛片特级一级免费视频| 中文字幕成人免费视频| 久久国产免费观看精品3| 十九岁在线观看免费完整版电影| 在线观看片免费人成视频无码| 在线观看免费播放av片| 久9久9精品免费观看| 99视频免费播放| 永久免费在线观看视频| 91成年人免费视频| 波多野结衣在线免费视频| 精品久久久久久久久免费影院| 91精品免费国产高清在线| 无码一区二区三区免费视频| 午夜寂寞在线一级观看免费| 国产免费人成视频在线观看| 伊人久久亚洲综合影院| 亚洲午夜福利精品久久| 亚洲乱码无码永久不卡在线| 亚洲av无码专区在线播放 | 18以下岁毛片在免费播放| 精品无码国产污污污免费网站 | 好湿好大好紧好爽免费视频| 9久热这里只有精品免费| 最新国产乱人伦偷精品免费网站| 99久在线国内在线播放免费观看| 国产香蕉免费精品视频| 在线免费视频一区| 精品国产亚洲男女在线线电影 | 亚洲老熟女@TubeumTV| 亚洲a视频在线观看| 亚洲AV无码国产精品永久一区| 色多多www视频在线观看免费| 国产综合免费精品久久久| 2019中文字幕在线电影免费 | 30岁的女人韩剧免费观看| 青青草国产免费久久久91| 久久久久国产亚洲AV麻豆| 亚洲av网址在线观看|