MyBatis2:config.xml文件


前言

前一篇文章,講了MyBatis入門,講到了MyBatis有兩個基本的配置文件,一個用來配置環境信息,一個用來寫SQL語句。前者我把它命名為config.xml,config.xml的內容是:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <typeAliases>
        <typeAlias alias="Student" type="com.xrq.domain.Student"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="student.xml"/>
    </mappers>
</configuration>

這是一個最基本的配置寫法,一般使用MyBatis都可以在這個配置文件的基礎上進行修改加以擴展,本文就學習一下config.xml文件<configuration></configuration>里面的一些內容。

 

typeAliases

這個標簽倒不關鍵,但是有這個標簽之后整體使用MyBatis就會很方便。typeAliases是為Java類型命名一個短的名字,它只和XML配置有關,用來減少類完全限定名的多於部分,例如:

<typeAliases>
    <typeAlias alias="Author" type="domain.blog.Author"/>
    <typeAlias alias="Blog" type="domain.blog.Blog"/>
    <typeAlias alias="Comment" type="domain.blog.Comment"/>
    <typeAlias alias="Post" type="domain.blog.Post"/>
    <typeAlias alias="Section" type="domain.blog.Section"/>
    <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

有了這個配置,"Blog"可以任意用來代替"domain.blog.Blog"所使用的地方。

 

environments

MyBatis可以配置多種環境,這會幫助你將SQL映射應用於多種數據庫之中。例如,你也許為開發要設置不同的配置,測試和生產環境。或者你可能有多重生產級數據庫卻共享相同的模式,所以你會想到對不同數據庫使用相同的SQL映射。這種用法是最多的。

有一個很重要的問題是:你可以配置多種環境,但你只能為每個SqlSessionFactory實例選擇一個

所以,如果你想連接兩個數據庫,那么就需要創建兩個SqlSessionFactory實例,每個數據庫對應一個。而如果是三個數據庫,你就需要三個實例,以此類推。我們把前面的environments拿出來看:

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>

而對應的Java代碼是:

reader = Resources.getResourceAsReader("config.xml");
ssf = new SqlSessionFactoryBuilder().build(reader);

SqlSessionFactoryBuilder的build方法實際上還有幾個別的重載方法,其中一個重要的是:

public SqlSessionFactory build(Reader reader, String environment) {
    return build(reader, environment, null);
}

原則是:如果傳入environment,指定的envrionment被綁定到SqlSessionFactory;如果不傳入environment,default指定的environment被綁定到SqlSessionFactory

接着來看一下環境元素:

1、transactionManager

在MyBatis中有兩種事物管理器類型,一種是JDBC,一種是MANAGED。

  • JDBC----這個配置直接簡單使用了JDBC的提交和回滾設置,它依賴於數據源得到的連接來管理事物范圍
  • MANAGED----這個配置幾乎不做什么。它從來不提交或回滾一個連接,而它會讓容器來管理事物的整個生命周期(比如Spring或J2EE應用服務器的上下文),默認情況下它會關閉連接,然而一些容器並不希望這樣,因此如果你需要從連接中停止它,將closeConnection屬性設置為false,例如:
    <transactionManager type="MANAGED">
        <property name="closeConnection" value="false"/>
    </transactionManager><transactionManager type="MANAGED">

2、dataSource

dataSource元素使用基本的JDBC數據源接口來配置JDBC連接對象的資源。許多MyBatis的應用程序將會按照上面的示例來配置數據源,然而它並不是必須的,要知道為了方便使用使用延遲加載,數據源才是必須的。有三種內建的數據源類型(也就是type="XXX"):

(1)UNPOOLED

這個數據源的實現是每次被請求時打開和關閉連接。它有一點慢,這是對簡單應用程序的一個很好的選擇,因為它不需要及時的可用連接,不同的數據庫對這個的表現也是不一樣的,所以對某些數據庫來說配置數據源並不重要,這個配置也是閑置的。UNPOOLED類型的數據源僅僅用來配置以下六種屬性:

  • driver----這是JDBC驅動的Java類的完全限定名
  • url----這是數據庫的JDBC URL地址
  • username----登陸數據庫的用戶名
  • password----登錄數據庫的密碼
  • defaultTransactionIsolationLevel----默認的連接事物隔離級別
  • driver.encoding----傳遞數據庫驅動的屬性,前綴以"driver."開頭即可,"driver.encoding"表示的就是傳遞encoding屬性

(2)POOLED

這是JDBC連接對象的數據源連接池的實現,用來避免創建新的連接實例時必要的連接和認證時間。這是一種當前Web應用程序用來快速響應請求的很流行的方法。除了上述(UNPOOLED)的屬性之外,還有些別的屬性可以用來配置POOLED數據源:

  • poolMaximumActiveConnections----在任意時間存在的活動(也就是正在使用)連接的數量,默認值為10
  • poolMaximumIdleConnections----任意時間存在的空閑連接數
  • poolMaximumCheckoutTime----在被強制返回之前,池中連接被檢查的時間,默認值為2000毫秒也就是20秒
  • poolTimeToWait、poolPingQuery、poolPingEnabled、poolPingConnectionsNotUsedFor----這些都是一些偵測數據庫連接的屬性

(3)JNDI

這個數據源的實現是為了使用如Spring或應用服務器這類的容器,容器可以集中或在外部配置數據源,然后放置一個JNDI上下文的引用。這個數據源只需要兩個屬性:

  • initial_context----這個屬性用來從初始上下文尋找環境,這個是可選屬性,如果被忽略,那么data_source屬性將會直接以initialContext為背景再次尋找
  • data_source----這是引用數據源實例位置的上下文路徑,它會以由initial_context查詢返回的環境為背景來查找,如果initial_context沒有返回結果時,直接以初始上下文為環境來查找

和其它數據源配置相似,它也可以通過名為"env."的前綴直接向初始上下文發送屬性。

 

mappers

既然MyBatis的行為已經由上述元素配置完了,那么下面就要定義SQL映射語句了,但是首先我們要告訴MyBatis到哪里去尋找這些語句。Java在這方面沒有提供一個很好的方法,所以最佳方式是告訴MyBatis去哪里找映射文件,可以通過使用相對路徑的資源引用,或者字符表示,或者url引用的完全限定名,例如:

// 使用相對於類路徑的資源
<mappers>
    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
    <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
    <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
// 使用完全限定路徑
<mappers>
    <mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>
    <mapper url="file:///var/sqlmaps/BlogMapper.xml"/>
    <mapper url="file:///var/sqlmaps/PostMapper.xml"/>
</mappers>

這些語句簡單告訴了MyBatis去哪里找映射文件,其余的細節就是在每個SQL映射文件中了,將在下面的文章中探討。

 

settings

前面幾個都是config.xml里面出現的,下面多講一個屬性,這個屬性可以不在config.xml中出現,但是比較重要,寫在這里為了以后可以看。

這個屬性是settings,是非常重要的調整,它們會改變MyBatis在運行時的行為方式。這面這個表格描述了設置信息,它們的含義和默認值:

參數設置 描述 有效值 默認值
cachedEnabled 用於配置使全局的映射器啟用或禁止緩存 true|false

true

lazyLoadingEnabled 全局啟用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載 true|false true
aggressiveLazyLoading 當啟用時,有延遲加載屬性的對象在被調用時將會完全加載任任意屬性,否則每種屬性將會按需要加載 true|false true
multipleResultSetsEnabled 允許或不允許多種結果集從一個單獨的語句中返回(需要合適的驅動) true|false true
useColumnLabel 使用列標簽代替列名。不同的驅動在這方面表現不同,參考驅動文檔或充分測試兩種方法來決定所使用的驅動 true|false true
useGeneratedKeys 允許JDBC支持生成的鍵,需要合適的驅動。如果設置為true則這個驅動強制生成的鍵被使用,盡管一些驅動拒絕兼容但仍然有效。 true|false true
autoMappingBehavior 指定MyBatis如何自動映射列到字段/屬性PARTIAL只會自動映射簡單、沒有嵌套的結果。FULL會自動映射任意復雜的結果。 NONE|PARTIAL|FULL PARTIAL
defaultExecutorType 配置默認的執行器。SIMPLE執行器沒有什么特別之處,REUSE執行器重用預處理語句,BATCH執行器重用語句和批量更新。 SIMPLE|REUSE|BATCH SIMPLE
defaultStatementTimeout 設置超時時間,它決定驅動等待一個數據庫響應的時間。 任何正整數 Not Set(null)

一個完整的設置信息元素的示例配置如下:

<settings>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="multipleResultSetsEnabled" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="enhancementEnabled" value="false"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25000"/>
</settings>

config.xml主要的配置信息差不多就是上面這一些,前三個比較重要,settings屬於高級設置了,需要比較有經驗的開發來依據項目情況做調整。

后面的一篇文章將探討SQL語句的映射,這也是MyBatis的核心。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM