sqlMapConfig.xml配置文件詳解:
<?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 > <!-- 引入外部的JDBC配置--> <PRoperties resource="jdbc.properties"/> <!--是否啟用緩存機制,是否啟用延遲加載機制,是否啟用字節碼增強機制,是否啟用錯誤處理機制,最大并發請求數,最大session數,最大并發事務數,是否啟用名稱空間--> <settings cacheModelsEnabled ="true" lazyLoadingEnabled="true" enhancementEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="true"/> <transactionManager type ="JDBC" > <!-- 定義了ibatis的事務管理器有3中(JDBC,JTA,EXTERNAL) --> <dataSource type ="SIMPLE" > <!-- type屬性指定了數據源的鏈接類型,也有3種類型(SIMPLE,DBCP,JNDI) --> <property name ="JDBC.Driver" value ="${jdbc.driverClassName}" /> <property name ="JDBC.ConnectionURL" value ="${jdbc.url}" /> <property name ="JDBC.Username" value ="${jdbc.username}" /> <property name ="JDBC.PassWord" value ="${jdbc.password}" /> <property name ="Pool.MaximumActiveConnections" value ="${jdbc.maxActive}" /> <!-- 連接池維持的最大容量 --> <property name ="Pool.MaximumIdleConnections" value ="${jdbc.maxIdle}" /> <!-- 連接池允許掛起的最大連接 --> <property name ="Pool.MaximumCheckoutTime" value ="${jdbc.maxCheckoutTime}" /> <!-- 連接被某個任務所允許占用的最大時間 --> <property name ="TimeToWait" value ="${jdbc.timeToWait}" /> <!-- 線程允許等待的最大時間 --> <property name ="Pool.ValidationQuery" value ="${jdbc.validationQuery}" /> </dataSource > </transactionManager > <sqlMap resource ="com/sql/*.xml" /> </sqlMapConfig >而在jdbc.properties中,我們配置了數據庫的驅動屬性,連接url,用戶名和密碼,這樣它們就可以被properties元素加載進來,使用起來非常方便。而properties配置文件中是以“名值對”的方式存儲的,那么我們使用名稱即可引用,這是很多人都熟悉的語法,比如:${driver}就能獲取到com.MySQL.jdbc.Driver
jdbc.properties的配置如下:
jdbc.url=jdbc:mysql://localhost:3306/testjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.username=rootjdbc.password=123456jdbc.maxActive=50#jdbc.validationQuery=select 1 from dual一、 transactionManager節點
transactionManagerab 定義了ibatis的事務管理器,目前提供了以下幾種選擇:
1) JDBC 通過傳統JDBC Connection.commit/rollback實現事務支持.2) JTA 使用容器提供的JTA服務實現全局事務管理.3) EXTERNAL 外部事務管理,如在EJB中使用ibatis,通過EJB的部署配置即可實現自動的事務管理機制.此時ibatis將把所有事務委托給外部容器進行管理.此外,通過spring等輕量級容量實現事務的配置化管理也是一個不錯的選擇.
二 dataSource 節點
dataSource 從屬于 transactionManager, 用于設定ibatis運行期使用DataSource屬性. type 屬性: dataSource 元素的 type 屬性指定了 dataSource 的實現類型.可選項目:1) SIMPLE:SIMPLE 是 ibatis 內置的 dataSource 實現,其中實現了一個簡單的數據庫連接池機制,對應 ibatis 實現類為com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.JDBC 使用 數據庫自己的事務(局部事務),connect.beginTranstion(), connect.commit()等.2) DBCP基于Apache DBCP連接池組件實現的DataSource封裝,當無容器提供DataSource服務時,建議使用該選項,對應ibatis實現類為com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.JTA : 使用jta 事務管理器管理事務(全局事務),使用userTranstion對象.3) JNDI使用J2EE容器提供的DataSource實現, DataSource將通過指定的JNDI Name從容器中獲取.對應ibatis實現類為com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.Ibatis 不控制事務,事務交由外部控制,一般在CTM,或spring托管事務中使用.
JNDI的配置大部分都在應用服務器中進行,所以在ibatis中的配置相對簡單
(1)jdbc事務控制的JNDI配置
< transctionManager type ="JDBC" > < dataSource type ="JNDI" > < property name ="DataSource" value ="java:comp/env/jdbc/myDataSource" /> </ dataSource > </ transctionManager >(2)JTA事務控制的JNDI配置
< transctionManager type ="JTA" > < property name ="UserTransaction" value ="java:/ctx/con/UserTransaction" /> < dataSource type ="JNDI" > < property name ="DataSource" value ="java:comp/env/jdbc/myDataSource" /> </ dataSource > </ transctionManager >
<!-- maxRequests 同時執行 SQL 語句的最大線程數。大于這個值的線程將阻塞直到另一個線程執行完成。不同的 DBMS有不同的限制值,但任何數據庫都有這些限制。通常這個值應該至少是maxTransactions(參見以下)的 10 倍,并且總是大于 maxSessions 和maxTranactions。減小這個參數值通常能提高性能。 例如:maxRequests=“256” 缺省值:512 maxSessions 同一時間內活動的最大 session 數。一個 session 可以maxSessions是代碼請求的顯式 session,也可以是當線程使用SqlMapClient 實例(即執行一條語句)自動獲得的session。它應該總是大于或等于 maxTransactions 并小于 maxRequests。減小這個參數值通常能減少內存使用。 例如:maxSessions=“64” 缺省值:128 maxTransactions 同時進入 SqlMapClient.startTransaction()的最大線程maxTransactions 數。大于這個值的線程將阻塞直到另一個線程退出。不同的 DBMS 有不同的限制值,但任何數據庫都有這些限制。這個參數值應該總是小于或等于maxSessions 并總是遠遠小于 maxRequests。減小這個參數值通常能提高性能。 例如:maxTransactions=“16” 缺省值:32 cacheModelsEnabled 全局性地啟用或禁用 SqlMapClient 的所有緩存cacheModelsEnabled model。調試程序時使用。 例如:cacheModelsEnabled=“true” 缺省值:true(啟用) lazyLoadingEnabled 全局性地啟用或禁用SqlMapClient的所有延遲加載。lazyLoadingEnabled 調試程序時使用。 例子:lazyLoadingEnabled=“true” 缺省值:true(啟用) enhancementEnabled 全局性地啟用或禁用運行時字節碼增強,以優化訪enhancementEnabled 問Java Bean屬性的性能,同時優化延遲加載的性能。 例子:enhancementEnabled=“true” 缺省值:false(禁用) useStatementNamespaces 如果啟用本屬性,必須使用全限定名來引用 mapped useStatementNamespaces statement。Mapped statement 的全限定名由 sql-map 的名稱和 mapped-statement 的名稱合成。例如: queryForObject("sqlMapName.statementName"); 例如:useStatementNamespaces=“false” 缺省值:false(禁用) defaultStatementTimeout 此設置值必須為一個整數,作為JDBC連接超時的時間,這個值可以被任意一個映射文件的statement屬性來重新設置, 如果沒有指明,查詢將無超時時間限制除非在映射文件中設置statement屬性值。被設置的值以秒為單位等待連接失效 classInfoCacheEnabled With this setting enabled, iBATIS will maintain a cache of introspected classes. This will lead to a significant reduction in startup time if many classes are reused. 例如: classInfoCacheEnabled=“true” 缺省值: true (啟用) statementCachingEnabled (iBATIS 2.3.0以后版本中有) With this setting enabled, iBATIS will maintain a local cache of prepared statements. This can lead to significant performance improvements. 例如: statementCachingEnabled=“true” 缺省值: true (啟用) -->
新聞熱點
疑難解答