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

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

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

    blogjava's web log

    blogjava's web log
    ...

    夏昕ibatisiBATIS 2.0 開發指南配置文件說明

    作者:夏昕 xiaxin(at)gmail.com

    ibatis基礎代碼包括:?
    1.??ibatis實例配置?
    一個典型的配置文件如下(具體配置項目的含義見后):?
    <? xml?version="1.0"?encoding="UTF-8"? ?> ?
    <! DOCTYPE?sqlMapConfig?
    ????PUBLIC?"-//iBATIS.com//DTD?SQL?Map?Config?2.0/
    ????"http://www.ibatis.com/dtd/sql-map-config-2.dt
    ?
    <sqlMapConfig
    > ?
    ?
    ??
    < settings?
    ????
    cacheModelsEnabled ="true" ?????
    ????enhancementEnabled
    ="true" ?????
    ????lazyLoadingEnabled
    ="true" ?????
    ????errorTracingEnabled
    ="true" ?????
    ????maxRequests
    ="32" ??????????
    ????maxSessions
    ="10" ??????????
    ????maxTransactions
    ="5" ?????????
    ????useStatementNamespaces
    ="false" ???
    ????
    /> ?
    ?
    ??
    < transactionManager? type ="JDBC" > ?

    ??
    < dataSource? type ="SIMPLE" > ?
    ??????
    < property? name ="JDBC.Driver" ?
    value
    ="com.p6spy.engine.spy.P6SpyDriver" /> ?
    ??????
    < property? name ="JDBC.ConnectionURL" ?
    value
    ="jdbc:mysql://localhost/sample" /> ?
    ??????
    < property? name ="JDBC.Username" ?value ="user" /> ?
    ??????
    < property? name ="JDBC.Password" ?value ="mypass" /> ?
    ??????
    < 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" /> ?
    ????
    </ dataSource > ?
    ??
    </ transactionManager > ?
    ?
    ??
    < sqlMap? resource ="com/ibatis/sample/User.xml" /> ?
    ?
    </ sqlMapConfig > ?

    ?

    ⑴ Settings 節點?

    cacheModelsEnabled?
    是否啟用SqlMapClient上的緩存機制。 建議設為"true"

    enhancementEnabled?
    是否針對POJO啟用字節碼增強機getter/setter的調用效能,避免Reflect所帶來的性能開銷。同時,這也為Lazy Loading帶來提升。 建議設為"true"

    errorTracingEnabled?
    是否啟用錯誤日志,在開發期間建議設為"true" 以方便調試

    lazyLoadingEnabled?
    是否啟用延遲加載機制,建議設為"true"

    maxRequests?
    最大并發請求數(Statement并發數)

    maxTransactions?
    最大并發事務數

    maxSessions? 最大Session數。即當前最大允許的并發SqlMapClient數。?
    ?
    useStatementNamespaces?
    是否使用Statement命名空間。
    這里的命名空間指的是映射文件中,sqlMap節的namespace屬性,如在上例中針對t_use
    表的映射文件sqlMap節點: <sqlMap namespace="User"> 這里,指定了此sqlMap節點下定義的操作均屬于"User"命名空間。 在useStatementNamespaces="true"的情況下,Statement調用需追加命名空間,如:sqlMap.update("User.updateUser",user);
    否則直接通過Statement名稱調用即可,如: sqlMap.update("updateUser",user); 但請注意此時需要保證所有映射文件中,Statement定義無重名。


    transactionManager節點
    transactionManager節點定義了ibatis的事務管理器,目前提供了以下幾
    種選擇:
    ? JDBC
    通過傳統JDBC Connection.commit/rollback實現事務支持。??
    JTA
    使用容器提供的JTA服務實現全局事務管理。
    ?? EXTERNAL
    外部事務管理,如在EJB中使用ibatis,通過EJB的部署配置即可實現自
    動的事務管理機制。此時ibatis將把所有事務委托給外部容器進行管理。



    dataSource節點?
    ? dataSource從屬于transactionManager節點,用于設定ibatis運行期使用的DataSource屬性。
    ?type屬性:
    ?dataSource節點的type屬性指定了dataSource的實現類型。 可選項目:
    ?SIMPLE:
    ? SIMPLE是ibatis內置的dataSource實現,其中實現了一個簡單的
    數據庫連接池機制,對應 ibatis 實現類為
    com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。
    ?
    DBCP:
    ? 基于Apache DBCP連接池組件實現的DataSource封裝,當無容器提
    供DataSource服務時,建議使用該選項,對應ibatis實現類為
    com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。
    ?
    JNDI:
    使用J2EE容器提供的DataSource實現,DataSource將通過指定
    的JNDI Name從容器中獲取。對應 ibatis實現類為
    com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。
    ?
    ?dataSource的子節點說明(SIMPLE&DBCP):
    JDBC.Driver? JDBC 驅動。
    如:org.gjt.mm.mysql.Driver

    JDBC.ConnectionURL?
    數據庫URL。
    如:jdbc:mysql://localhost/sample
    如果用的是SQLServer JDBC Driver,需要
    在url后追加SelectMethod=Cursor以獲得
    JDBC事務的多Statement支持。
    ?JDBC.Username
    ? 數據庫用戶名
    JDBC.Password?
    數據庫用戶密碼
    Pool.MaximumActiveConnections?
    數據庫連接池可維持的最大容量。

    Pool.MaximumIdleConnections?
    數據庫連接池中允許的掛起(idle)連接數。

    JNDI由于大部分配置是在應用服務器中進行,因此ibatis中的配置相對簡
    分別使用JDBC和JTA事務管理的JDNI配置:
    使用JDBC事務管理的JNDI DataSource配置

    < transactionManager? type ="JDBC" ? > ?
    < dataSource? type ="JNDI" > ?
    < property? name ="DataSource" ??
    value
    ="java:comp/env/jdbc/myDataSource" /> ?
    </ dataSource > ?
    </ transactionManager > ?
    < transactionManager? type ="JTA" ? > ?
    < property? name ="UserTransaction" ??
    value
    ="java:/ctx/con/UserTransaction" /> ?
    < dataSource? type ="JNDI" > ?
    < property? name ="DataSource" ??
    value
    ="java:comp/env/jdbc/myDataSource" /> ?
    </ dataSource > ?

    ?sqlMap節點
    sqlMap節點指定了映射文件的位置,配置中可出現多個sqlMap節點,以指定
    項目內所包含的所有映射文件。

    ibatis基礎語義

    XmlSqlMapClientBuilder
    XmlSqlMapClientBuilder是ibatis 2.0之后版本新引入的組件,用以替代1.x
    版本中的XmlSqlMapBuilder。其作用是根據配置文件創建SqlMapClient實例。
    ?
    SqlMapClient
    SqlMapClient是ibatis的核心組件,提供數據操作的基礎平臺。SqlMapClient
    可通過XmlSqlMapClientBuilder創建:?
    ?

    String?resource? = " com/ibatis/sample/SqlMapConfig.xml " ;?
    Reader?reader;?
    ?
    reader?
    = ?Resources.getResourceAsReader(resource);?
    ?
    XmlSqlMapClientBuilder?xmlBuilder?
    = ??
    new ?XmlSqlMapClientBuilder();?
    ?
    SqlMapClient?sqlMap?
    = ?xmlBuilder.buildSqlMap(reader);?

    "com/ibatis/sample/SqlMapConfig.xml"指明了配置文件在CLASSPATH
    中的相對路徑。XmlSqlMapClientBuilder通過接受一個Reader類型的配置文
    件句柄,根據配置參數,創建SqlMapClient實例。
    ?
    SqlMapClient提供了眾多數據操作方法,下面是一些常用方法的示例,具體說明
    文檔請參見ibatis java doc,或者ibatis官方開發手冊。

    SqlMapClient基本操作示例

    以下示例摘自ibatis官方開發手冊,筆者對其進行了重新排版以獲得更好的閱讀效果。
    例1: 數據寫入操作(insert, update, delete):

    sqlMap.startTransaction();?
    Product?product?
    = ? new ?Product();?
    product.setId?(
    1 );?
    product.setDescription?(“Shih?Tzu”);?
    int ?rows? = ?sqlMap.insert?(“insertProduct”,?product);?
    sqlMap.commitTransaction();?

    例2: 數據查詢 (select)

    sqlMap.startTransaction();?
    Integer?key?
    = ? new ?Integer?( 1 );?
    Product?product?
    = ?(Product)sqlMap.queryForObject?
    (“getProduct”,?key);?
    sqlMap.commitTransaction();?

    例3: 在指定對象中存放查詢結果(select)?

    sqlMap.startTransaction();?
    Customer?customer?
    = ? new ?Customer();?
    sqlMap.queryForObject(“getCust”,?parameterObject,?customer);?
    sqlMap.queryForObject(“getAddr”,?parameterObject,?customer);?
    sqlMap.commitTransaction();?

    例4: 執行批量查詢 (select)

    sqlMap.startTransaction();?
    List?list?
    = ?sqlMap.queryForList?(“getProductList”,? null )
    sqlMap.commitTransaction();?

    例5: 關于AutoCommit

    // 沒有預先執行startTransaction時,默認為auto_commit模式?
    int ?rows? = ?sqlMap.insert?(“insertProduct”,?product);?

    例6:查詢指定范圍內的數據

    sqlMap.startTransaction();?
    List?list?
    = ?sqlMap.queryForList?(“getProductList”,? null ,? 0 ,? 40 );?
    sqlMap.commitTransaction();?

    例7: 結合RowHandler進行查詢(select)

    public ? class ?MyRowHandler? implements ?RowHandler? {?
    ???
    public ? void ?handleRow?(Object?object,?List?list)? throws ?
    ????SQLException?
    {?
    ??????Product?product?
    = ?(Product)?object;?
    ??????product.setQuantity?(
    10000 );?
    ??????sqlMap.update?(“updateProduct”,?product);?
    ????}
    ?
    }
    ?
    sqlMap.startTransaction();?
    RowHandler?rowHandler?
    = ? new ?MyRowHandler();?
    List?list?
    = ?sqlMap.queryForList?(“getProductList”,? null ,?
    rowHandler);?
    sqlMap.commitTransaction();?

    ?

    // 例8:?分頁查詢?(select)?
    PaginatedList?list? = ?
    sqlMap.queryForPaginatedList?(“getProductList”,?
    null ,? 10 );?
    list.nextPage();?
    list.previousPage();?
    ?
    ?
    // 例9:?基于Map的批量查詢?(select)?
    sqlMap.startTransaction();?
    Map?map?
    = ?sqlMap.queryForMap?(“getProductList”,? null ,?
    “productCode”);?
    sqlMap.commitTransaction();?
    Product?p?
    = ?(Product)?map.get(“EST - 93 ”);?


    ?

    posted on 2006-05-24 10:47 record java and net 閱讀(2980) 評論(4)  編輯  收藏 所屬分類: java轉載的文章

    評論

    # 請教您一個問題 2006-08-02 15:31 Big Head

    以前我寫用的IDE是eclipse 3.2 + 插件MyEclipse 5.0 ,我把ibatis的配置文件放在src目錄下一個名為sqlmap的包內,還是我可以正常使用。

    后來我把IDE換成JBuilder 2005,我用同樣的方法,卻不能使用。

    請問大蝦,在JBuilder中,這個配置文件的路徑是不是有什么不同啊??

    麻煩您幫我解決這個問題,本人不甚感激!!

    我的E-mail是: yuanqijinstar@163.com  回復  更多評論   

    # re: 夏昕ibatisiBATIS 2.0 開發指南配置文件說明 2006-08-02 16:06 吳某人-不斷地學習

    eclipse 會把 src的sqlmap文件 自動拷到 classes 目錄下..

    JBuilder 好像不會..你再自己手工把配置文件靠到 classes 目錄下就可以..  回復  更多評論   

    # re: 夏昕ibatisiBATIS 2.0 開發指南配置文件說明 2006-11-23 11:35 Apple[匿名]

    請教您個問題:  回復  更多評論   

    # re: 夏昕ibatisiBATIS 2.0 開發指南配置文件說明 2006-11-23 11:38 Apple[匿名]

    我用struts+ibatis 做insert的時候不知道為什么不讀我的struts-config.xml
    總是插入不成功, <action
    attribute="registerForm"
    input="/register.jsp"
    name="registerForm"
    path="/register"
    scope="request"
    type="cn.com.test.struts.action.RegisterAction">
    <forward
    name="wrong"
    path="/7.jsp"
    redirect="true" />
    <forward
    name="success"
    path="/3.jsp"
    redirect="true" />
    </action>

    請指教!!  回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 国产亚洲美女精品久久久久| 久久免费视频网站| 亚洲乱码无码永久不卡在线| 无码日韩精品一区二区免费暖暖| 亚洲视频日韩视频| 啊灬啊灬别停啊灬用力啊免费看| 好吊色永久免费视频大全| 亚洲高清在线观看| 永久黄网站色视频免费直播| 中文在线观看免费网站| 亚洲午夜成激人情在线影院| 亚洲高清国产拍精品青青草原 | 69成人免费视频| 香蕉国产在线观看免费| 亚洲精品中文字幕乱码影院| 免费在线观看理论片| 久视频精品免费观看99| 日韩a毛片免费观看| 亚洲视频免费观看| 亚洲婷婷国产精品电影人久久| 久久国产免费福利永久| 一区二区三区视频免费观看| 亚洲天堂2016| 亚洲AV无码乱码国产麻豆| 在线观着免费观看国产黄| 51在线视频免费观看视频| 新最免费影视大全在线播放| 亚洲kkk4444在线观看| 亚洲国产另类久久久精品| 免费一看一级毛片| 久久久高清免费视频| 成全视频免费观看在线看| 日韩精品无码免费视频| 亚洲中文字幕无码久久| 亚洲最大在线观看| 老色鬼久久亚洲AV综合| 亚洲精品午夜无码专区| 亚洲国产小视频精品久久久三级| 最新仑乱免费视频| 国产精品成人观看视频免费| 久久久久国产免费|