iBatis之SqlMapConfig.xml配置說明

以下是SqlMapConfig.xml配置文件的一個例子:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE sqlMapConfig
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 
	"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
           <properties resource="SqlMapConfig.properties" /> 
           <settings 
                enhancementEnabled="true"  
		azyLoadingEnabled="true" 	
		cacheModelsEnabled="true"
		errorTracingEnabled="true"
                maxRequests="32" 
		maxSessions="10"
		maxTransactions="5"     
                useStatementNamespaces="true"  
            />

            <transactionManager type="JDBC">
                   <dataSource type="SIMPLE">
                          <property name="JDBC.Driver" value="${driver}" />
                          <property name="JDBC.ConnectionURL" value="${url}" />
                          <property name="JDBC.Username" value="${username}" />
                          <property name="JDBC.Password" value="${password}" /
                          <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 users" />
                          <property name="Pool.PingEnabled" value="false" /> 
                          <property name="Pool.PingConnectionsOlderThan" value="1" />
                          <property name="Pool.PingConnectionsNotUsedFor" value="1" />
                   </dataSource>
            </transactionManager>
			
            <sqlMap resource="com/demo/ibatis/beans/users_SqlMap.xml" />
</sqlMapConfig>
iBatis使用 XML 配置文件統一配置不同的屬性,包括 DataSource 的詳細配置信息,SQL Map 和其他可選屬性,如線程管理等。

下面來詳細說明個部分:

<properties>元素

        SQL Map 配置文件擁有唯一的<properties>元素,用於在配置文件中使用標準的 Java 屬性文件(name=value)。

這樣做後,在屬性文件中定義的屬性可以作爲變量在 SQL Map 配置文件及其包含的所有 SQL Map 映射文件中引用。

例如,如果屬性文件中包含屬性:driver=org.hsqldb.jdbcDriver。 

SQL Map 配置文件及其每個映射文件都可以使用佔位符${driver}來代表值:org.hsqldb.jdbcDriver。

例如:<property name="JDBC.Driver"value="${driver}"/>
屬性文件可以從類路徑中加載(使用resource屬性),也可以從合法的 URL 中加載(使用url 屬性)。

例如,要加載固定路徑的屬性文件,使用:<properties url=”file:///c:/config/my.properties” />

<setting>元素

<setting>元素用於配置和優化 SqlMapClient實例的各選項。<setting>元素本身及其所有的屬性都是可選的。具體請看下錶:


     maxRequests   

同時執行 SQL 語句的最大線程數。大於這個值的線程將阻塞直到另一個線程執行完成。不同的 DBMS有不同的限制值,但任何數據庫都有這些限制。通常這個值應該至少是 maxTransactions(參見以下)的 10 倍 , 並 且 總 是 大 於 maxSessions 和maxTranactions。減小這個參數值通常能提高性能。
例如:maxRequests=“256”
缺省值:512

    maxSessions

同一時間內活動的最大 session 數。一個 session 可以是代碼請求的顯式 session,也可以是當線程使用SqlMapClient 實例(即執行一條語句)自動獲得的session。它應該總是大於或等於 maxTransactions 並小於 maxRequests。減小這個參數值通常能減少內存使用。

例如:maxSessions=“64”

缺省值:128

    maxTransactions  

同時進入 SqlMapClient.startTransaction()的最大線程數。大於這個值的線程將阻塞直到另一個線程退出。不同的 DBMS 有不同的限制值,但任何數據庫都有這些限制。這個參數值應該總是小於或等於

maxSessions 並總是遠遠小於 maxRequests。減小這個參數值通常能提高性能。

例如:maxTransactions=“16”

缺省值:32

    cacheModelsEnabled

全局性地啓用或禁用 SqlMapClient 的所有緩存model。調試程序時使用。

例如:cacheModelsEnabled=“true”

缺省值:true(啓用)

    lazyLoadingEnabled

全局性地啓用或禁用SqlMapClient的所有延遲加載。調試程序時使用。

例子:lazyLoadingEnabled=“true”

缺省值:true(啓用)

    enhancementEnabled

全局性地啓用或禁用運行時字節碼增強,以優化訪問 Java Bean 屬性的性能,同時優化延遲加載的性能。

例子:enhancementEnabled=“true”

缺省值:false(禁用)

 useStatementNamespaces   

如果啓用本屬性,必須使用全限定名來引用 mappedstatement。Mapped statement 的全限定名由 sql-map的名稱和 mapped-statement 的名稱合成。例如:

queryForObject(“sqlMapName.statementName”);

例子:useStatementNamespaces=“false”

缺省值:false(禁用)

    errorTracingEnabled

是否啓用錯誤日誌,在開發期間建議設爲"true" 以方便調試

例子:errorTracingEnabled=“true”

缺省值:false(禁用)

<transactionManager>元素

<transationManager>元素爲 SQL Map 配置事務管理服務。屬性 type 指定所使用的事務管理器類型。這個屬性值可以是一個類名,也可以是一個別名。

包含在框架的三個事務管理器分別是:JDBC,JTA 和 EXTERNAL。
1. JDBC:通過常用的 Connection commit()和 rollback()方法,讓 JDBC 管理事務。
2. JTA:本事務管理器使用一個 JTA 全局事務,使 SQL Map 的事務包括在更大的事務範圍內,這個更大的事務範圍可能包括了其他的數據庫和事務資源。

這個配置需要一個UserTransaction屬性,以便從JNDI獲得一個UserTransaction。參見以下JNDI數據源的例子。
3. EXTERNAL:這個配置可以我們自己管理事務。我們仍然可以配置一個數據源,但事務不再作爲框架生命週期的一部分被提交或回退。

這意味着 SQL Map 外部應用的一部分必須自己管理事務。這個配置也可以用於沒有事務管理的數據庫(例如只讀數據庫)。

<datasource>元素

<datasource>是<transactionManager>的一部分,爲 SQL Map 數據源設置了一系列參數。目前 SQL Map 架構只提供三個 DataSource Factory,分別爲:

SimpleDataSourceFactory(別稱爲SIMPLE)、DbcpDataSourceFactory(別稱爲DBCP)、JndiDataSourceFactory(別稱爲JNDI)

但我們也可以添加自己的實現。下面簡單地說明一下 三個DataSourceFactory。

SimpleDataSourceFactory:

        SimpleDataSourceFactory 爲 DataSource 提供了一個基本的實現,適用於在沒有 J2EE 容器提供 DataSource 的情況。它基於 iBatis 的 SimpleDataSource 連接池實現。配置例子:

<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.postgresql.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:postgresql://server:5432/dbname"/>
<property name="JDBC.Username" value="user"/>
<property name="JDBC.Password" value="password"/>
<!-- OPTIONAL PROPERTIES BELOW -->
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="120000"/>
<property name="Pool.TimeToWait" value="10000"/>
<property name="Pool.PingQuery" value="select * from dual"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="0"/>
<property name="Pool.PingConnectionsNotUsedFor" value="0"/>
</dataSource>
</transactionManager>

DbcpDataSourceFactory:

        DbcpDataSourceFactory 實現使用 Jakarta DBCP(Database Connection Pool)的 DataSource API 提供連接池服務。適用於應用/Web 容器不提供 DataSource 服務的情況,或執行一個單獨的應用。配置例子:

<transactionManager type="JDBC">
<dataSource type="DBCP">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<!-- OPTIONAL PROPERTIES BELOW -->
<property name="Pool.MaximumActiveConnections" value="10"/>

<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumWait" value="60000"/>
<!-- Use of the validation query can be problematic.
If you have difficulty, try without it. -->
<property name="Pool.ValidationQuery" value="select * from ACCOUNT"/>
<property name="Pool.LogAbandoned" value="false"/>
<property name="Pool.RemoveAbandoned" value="false"/>
<property name="Pool.RemoveAbandonedTimeout" value="50000"/>
</datasource>
</transactionManager>

JndiDataSourceFactory:

        JndiDataSourceFactory 在應用容器內部從 JNDI Context 中查找 DataSource 實現。當使用應用服務器,並且服務器提供了容器管理的連接池和相關 DataSource 實現的情況下,可以使用 JndiDataSourceFactory。使用 JDBC DataSource 的標準方法是通過 JNDI 來查找。配置例子:

<transactionManager type="JDBC" >
<dataSource type="JNDI">
<property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
        以上配置使用了常用的 JDBC 事務管理。但對於容器管理的資源,您可能需要象下面的例子一樣配置,讓它能和全局事務一起工作:
<transactionManager type="JTA" >
<property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>
<dataSource type="JNDI">
<property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
       注意,UserTransaction 屬性指向 UserTransaction 實例所在的 JNDI 位置。JTA 事務管理需要它,以使 SQL Map 能夠參與涉及其他數據庫和事務資源的範圍更大的事務。

<sqlMap>元素

<sqlMap>元素用於包括 SQL Map 映射文件和其他的 SQL Map 配置文件。每個SqlMapClient 對象使用的所有 SQL Map 映射文件都要在此聲明。

映射文件作爲 stream resource 從類路徑或 URL 讀入。您必須在這裏指定所有的 SQL Map 文件。例子如下:
<!-- CLASSPATH RESOURCES -->以下是類路徑讀入的
<sqlMap resource="com/ibatis/examples/sql/Customer.xml" />
<sqlMap resource="com/ibatis/examples/sql/Account.xml" />
<sqlMap resource="com/ibatis/examples/sql/Product.xml" />
<!-- URL RESOURCES -->以下是url讀入
<sqlMap url="file:///c:/config/Customer.xml " />
<sqlMap url="file:///c:/config/Account.xml " />
<sqlMap url="file:///c:/config/Product.xml" />







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章