1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 <configuration> 4 5 <properties resource="db.properties"/> 6 <!-- 對事務的管理和連接池的配置 --> 7 <environments default="development"> 8 <environment id="development"> 9 <transactionManager type="JDBC" /> 10 <dataSource type="POOLED"> 11 <property name="driver" value="${driver}" /> 12 <property name="url" value="${url}" /> 13 <property name="username" value="${username}" /> 14 <property name="password" value="${password}" /> 15 </dataSource> 16 </environment> 17 </environments> 18 <mappers> 19 <mapper resource="orm/personMapper.xml"/> 20 </mappers> 21 </configuration>
<properties resource="db.properties"/>
引用了一個外部db.properties文件,用於配置數據庫連接信息,db.properties文件的內容
1 driver=com.mysql.jdbc.Driver 2 url=jdbc\:mysql\://localhost\:3306/test 3 username=root 4 password=123456
事務管理器(transactionManager)
在 MyBatis 中有兩種類型的事務管理器(也就是 type=”[JDBC|MANAGED]”):
數據源(dataSource)
dataSource 元素使用標准的 JDBC 數據源接口來配置 JDBC 連接對象的資源。
- 許多 MyBatis 的應用程序將會按示例中的例子來配置數據源。然而它並不是必須的。要知道為了方便使用延遲加載,數據源才是必須的。
有三種內建的數據源類型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):
UNPOOLED– 這個數據源的實現只是每次被請求時打開和關閉連接。雖然一點慢,它對在及時可用連接方面沒有性能要求的簡單應用程序是一個很好的選擇。 不同的數據庫在這方面表現也是不一樣的,所以對某些數據庫來說使用連接池並不重要,這個配置也是理想的。UNPOOLED 類型的數據源僅僅需要配置以下 5 種屬性:
- driver – 這是 JDBC 驅動的 Java 類的完全限定名(並不是JDBC驅動中可能包含的數據源類)。
- url – 這是數據庫的 JDBC URL 地址。
- username – 登錄數據庫的用戶名。
- password – 登錄數據庫的密碼。
- defaultTransactionIsolationLevel – 默認的連接事務隔離級別。
作為可選項,你也可以傳遞屬性給數據庫驅動。要這樣做,屬性的前綴為“driver.”,例如:
- driver.encoding=UTF8
這將通過DriverManager.getConnection(url,driverProperties)方法傳遞值為 UTF8 的 encoding 屬性給數據庫驅動。
POOLED– 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。 這是一種使得並發 Web 應用快速響應請求的流行處理方式。
除了上述提到 UNPOOLED 下的屬性外,會有更多屬性用來配置 POOLED 的數據源:
- poolMaximumActiveConnections – 在任意時間可以存在的活動(也就是正在使用)連接數量,默認值:10
- poolMaximumIdleConnections – 任意時間可能存在的空閑連接數。
- poolMaximumCheckoutTime – 在被強制返回之前,池中連接被檢出(checked out)時間,默認值:20000 毫秒(即 20 秒)
- poolTimeToWait – 這是一個底層設置,如果獲取連接花費的相當長的時間,它會給連接池打印狀態日志並重新嘗試獲取一個連接(避免在誤配置的情況下一直安靜的失敗),默認值:20000 毫秒(即 20 秒)。
- poolPingQuery – 發送到數據庫的偵測查詢,用來檢驗連接是否處在正常工作秩序中並准備接受請求。默認是“NO PING QUERY SET”,這會導致多數數據庫驅動失敗時帶有一個恰當的錯誤消息。
- poolPingEnabled – 是否啟用偵測查詢。若開啟,也必須使用一個可執行的 SQL 語句設置 poolPingQuery 屬性(最好是一個非常快的 SQL),默認值:false。
- poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的使用頻度。這可以被設置成匹配具體的數據庫連接超時時間,來避免不必要的偵測,默認值:0(即所有連接每一時刻都被偵測 — 當然僅當 poolPingEnabled 為 true 時適用)。
JNDI– 這個數據源的實現是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的引用。這種數據源配置只需要兩個屬性:
- initial_context – 這個屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))。這是個可選屬性,如果忽略,那么 data_source 屬性將會直接從 InitialContext 中尋找。
- data_source – 這是引用數據源實例位置的上下文的路徑。提供了 initial_context 配置時會在其返回的上下文中進行查找,沒有提供時則直接在 InitialContext 中查找。
和其他數據源配置類似,可以通過添加前綴“env.”直接把屬性傳遞給初始上下文。比如:
- env.encoding=UTF8
既然 MyBatis 的行為已經由上述元素配置完了,我們現在就要定義 SQL 映射語句了。但是首先我們需要告訴 MyBatis 到哪里去找到這些語句。 Java 在自動查找這方面沒有提供一個很好的方法,所以最佳的方式是告訴 MyBatis 到哪里去找映射文件。你可以使用相對於類路徑的資源引用, 或完全限定資源定位符(包括 file:/// 的 URL),或類名和包名等。例如:
<!-- Using classpath relative resources --> <mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers>
<!-- Using url fully qualified paths --> <mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> <mapper url="file:///var/mappers/BlogMapper.xml"/> <mapper url="file:///var/mappers/PostMapper.xml"/> </mappers>
<!-- Using mapper interface classes --> <mappers> <mapper class="org.mybatis.builder.AuthorMapper"/> <mapper class="org.mybatis.builder.BlogMapper"/> <mapper class="org.mybatis.builder.PostMapper"/> </mappers>
<!-- Register all interfaces in a package as mappers --> <mappers> <package name="org.mybatis.builder"/> </mappers>
這些配置會告訴了 MyBatis 去哪里找映射文件,剩下的細節就應該是每個 SQL 映射文件了,也就是接下來我們要討論的。