MyBatis(2):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"

"//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映射應用于多種數據庫之中。例如,你也許為開發要設置不同的配置,測試和生產環境?;蛘吣憧贍苡卸嘀厴妒菘餿垂蠶硐嗤哪J?,所以你會想到對不同數據庫使用相同的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的核心。


來源:importnew

上一篇: MyBatis(1):MyBatis入門

下一篇: 還以為 Java 是免費的?甲骨文可能要對 Java 非付費用戶下手了

分享到: 更多
电玩城注册送28元 麻将28杠比大小规则 球探体育比分破解版 竞彩足球计算器 双色球双色球走势图 澳门赌大小怎么玩 打麻将规则及图解 3d试机号出胆技巧规律 pc加拿大怎么算技巧 旺旺棋牌代理 斗地主单机版斗地主 足球比分直播即时比分 北赛车pk10直播链接 pk10在线精准人工计划 pk10模式长期稳赚3码 香港慈善六肖