第三章 MyBatis核心配置

配置文件的體系架構(gòu)說明

<?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>
    <!-- 外部配置悍汛,動(dòng)態(tài)替換颅围,可以將配置信息抽取到配置文件中 -->
    <properties resource="org/mybatis/example/config.properties">
        <property name="username" value="dev_user"/>
        <property name="password" value="F2Fa3!33TYyg"/>
    </properties>

    <!-- 極為重要的調(diào)整設(shè)置,它們會(huì)改變 MyBatis 的運(yùn)行時(shí)行為,下面是setting設(shè)置配置示例 -->
    <settings>
        <!-- 全局性地開啟或關(guān)閉所有映射器配置文件中已配置的任何緩存。默認(rèn)為true-->
        <setting name="cacheEnabled" value="true"/>

        <!-- 延遲加載的全局開關(guān)。
        當(dāng)開啟時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)延遲加載裆馒。 特定關(guān)聯(lián)關(guān)系中可通過設(shè)置 fetchType 屬性來覆蓋該項(xiàng)的開關(guān)狀態(tài)。
        默認(rèn)為false -->
        <setting name="lazyLoadingEnabled" value="true"/>

        <!--
        開啟時(shí)丐怯,任一方法的調(diào)用都會(huì)加載該對(duì)象的所有延遲加載屬性喷好。
        否則,每個(gè)延遲加載屬性會(huì)按需加載(參考 lazyLoadTriggerMethods)读跷。
        默認(rèn)為false (在 3.4.1 及之前的版本中默認(rèn)為 true)-->
        <setting name="aggressiveLazyLoading" value="false"/>

        <!-- 是否允許單個(gè)語句返回多結(jié)果集(需要數(shù)據(jù)庫(kù)驅(qū)動(dòng)支持)梗搅。默認(rèn)為true-->
        <setting name="multipleResultSetsEnabled" value="true"/>

        <!-- 使用列標(biāo)簽代替列名。實(shí)際表現(xiàn)依賴于數(shù)據(jù)庫(kù)驅(qū)動(dòng)效览,具體可參考數(shù)據(jù)庫(kù)驅(qū)動(dòng)的相關(guān)文檔些膨,或通過對(duì)比測(cè)試來觀察。默認(rèn)為true-->
        <setting name="useColumnLabel" value="true"/>

        <!-- 允許 JDBC 支持自動(dòng)生成主鍵钦铺,需要數(shù)據(jù)庫(kù)驅(qū)動(dòng)支持订雾。
        如果設(shè)置為 true,將強(qiáng)制使用自動(dòng)生成主鍵矛洞。盡管一些數(shù)據(jù)庫(kù)驅(qū)動(dòng)不支持此特性洼哎,但仍可正常工作(如 Derby)烫映。
        默認(rèn)為false-->
        <setting name="useGeneratedKeys" value="false"/>

        <!-- 指定 MyBatis 應(yīng)如何自動(dòng)映射列到字段或?qū)傩浴?        NONE 表示關(guān)閉自動(dòng)映射;
        PARTIAL 只會(huì)自動(dòng)映射沒有定義嵌套結(jié)果映射的字段噩峦;
        FULL 會(huì)自動(dòng)映射任何復(fù)雜的結(jié)果集(無論是否嵌套)锭沟。
        默認(rèn)為 PARTIAL-->
        <setting name="autoMappingBehavior" value="PARTIAL"/>

        <!-- 指定發(fā)現(xiàn)自動(dòng)映射目標(biāo)未知列(或未知屬性類型)的行為。
        NONE: 不做任何反應(yīng)
        WARNING: 輸出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等級(jí)必須設(shè)置為 WARN)
        FAILING: 映射失敗 (拋出 SqlSessionException)
        默認(rèn)為 NONE-->
        <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

        <!-- 配置默認(rèn)的執(zhí)行器识补。
        SIMPLE 就是普通的執(zhí)行器族淮;
        REUSE 執(zhí)行器會(huì)重用預(yù)處理語句(PreparedStatement);
        BATCH 執(zhí)行器不僅重用語句還會(huì)執(zhí)行批量更新凭涂。
        默認(rèn)為SIMPLE-->
        <setting name="defaultExecutorType" value="SIMPLE"/>

        <!-- 設(shè)置超時(shí)時(shí)間祝辣,它決定數(shù)據(jù)庫(kù)驅(qū)動(dòng)等待數(shù)據(jù)庫(kù)響應(yīng)的秒數(shù)。默認(rèn)為未設(shè)置null-->
        <setting name="defaultStatementTimeout" value="25"/>

        <!-- 為驅(qū)動(dòng)的結(jié)果集獲取數(shù)量(fetchSize)設(shè)置一個(gè)建議值切油。此參數(shù)只可以在查詢?cè)O(shè)置中被覆蓋蝙斜。默認(rèn)為未設(shè)置null-->
        <setting name="defaultFetchSize" value="100"/>

        <!-- 是否允許在嵌套語句中使用分頁(RowBounds)。如果允許使用則設(shè)置為 false澎胡。-->
        <setting name="safeRowBoundsEnabled" value="false"/>

        <!-- 是否開啟駝峰命名自動(dòng)映射孕荠,即從經(jīng)典數(shù)據(jù)庫(kù)列名 A_COLUMN 映射到經(jīng)典 Java 屬性名 aColumn。    true | false
        默認(rèn)為False-->
        <setting name="mapUnderscoreToCamelCase" value="false"/>

        <!--
        MyBatis 利用本地緩存機(jī)制(Local Cache)防止循環(huán)引用和加速重復(fù)的嵌套查詢攻谁。
        默認(rèn)值為 SESSION稚伍,會(huì)緩存一個(gè)會(huì)話中執(zhí)行的所有查詢。
        若設(shè)置值為 STATEMENT戚宦,本地緩存將僅用于執(zhí)行語句个曙,對(duì)相同 SqlSession 的不同查詢將不會(huì)進(jìn)行緩存。-->
        <setting name="localCacheScope" value="SESSION"/>

        <!-- 當(dāng)沒有為參數(shù)指定特定的 JDBC 類型時(shí)阁苞,
        空值的默認(rèn) JDBC 類型。 某些數(shù)據(jù)庫(kù)驅(qū)動(dòng)需要指定列的 JDBC 類型祠挫,多數(shù)情況直接用一般類型即可那槽,
        比如 NULL、VARCHAR 或 OTHER等舔。-->
        <setting name="jdbcTypeForNull" value="OTHER"/>

        <!-- 指定對(duì)象的哪些方法觸發(fā)一次延遲加載骚灸。用逗號(hào)分隔的方法列表。-->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    </settings>

    <!-- 類型別名可為 Java 類型設(shè)置一個(gè)縮寫名字慌植。 它僅用于 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>

    <!-- 指定一個(gè)包名,MyBatis 會(huì)在包名下面搜索需要的 Java Bean-->
    <typeAliases>
        <package name="domain.blog"/>
    </typeAliases>

    <!--
    配置成適應(yīng)多種環(huán)境蝶柿,這種機(jī)制有助于將 SQL 映射應(yīng)用于多種數(shù)據(jù)庫(kù)之中丈钙,
    現(xiàn)實(shí)情況下有多種理由需要這么做。例如交汤,開發(fā)雏赦、測(cè)試和生產(chǎn)環(huán)境需要有不同的配置;
    或者想在具有相同 Schema 的多個(gè)生產(chǎn)數(shù)據(jù)庫(kù)中使用相同的 SQL 映射。還有許多類似的使用場(chǎng)景星岗。
    不過要記滋畲蟆:盡管可以配置多個(gè)環(huán)境,但每個(gè) SqlSessionFactory 實(shí)例只能選擇一種環(huán)境俏橘。
    -->
    <environments default="development">
        <environment id="development">
            <!--
            兩種類型的事務(wù)管理器(也就是 type="[JDBC|MANAGED]";
            JDBC – 這個(gè)配置直接使用了 JDBC 的提交和回滾設(shè)施允华,它依賴從數(shù)據(jù)源獲得的連接來管理事務(wù)作用域;
            MANAGED – 這個(gè)配置幾乎沒做什么。它從不提交或回滾一個(gè)連接寥掐,而是讓容器來管理事務(wù)的整個(gè)生命周期(比如 JEE 應(yīng)用服務(wù)器的上下文)靴寂。 默認(rèn)情況下它會(huì)關(guān)閉連接。然而一些容器并不希望連接被關(guān)閉曹仗,因此需要將 closeConnection 屬性設(shè)置為 false 來阻止默認(rèn)的關(guān)閉行為
           注意:使用 Spring + MyBatis榨汤,則沒有必要配置事務(wù)管理器,因?yàn)?Spring 模塊會(huì)使用自帶的管理器來覆蓋前面的配置怎茫。
            -->
            <transactionManager type="JDBC"/>

            <!--
            dataSource 元素使用標(biāo)準(zhǔn)的 JDBC 數(shù)據(jù)源接口來配置 JDBC 連接對(duì)象的資源收壕。
            大多數(shù) MyBatis 應(yīng)用程序會(huì)按示例中的例子來配置數(shù)據(jù)源。雖然數(shù)據(jù)源配置是可選的轨蛤,但如果要啟用延遲加載特性蜜宪,就必須配置數(shù)據(jù)源。
            有三種內(nèi)建的數(shù)據(jù)源類型(也就是 type="[UNPOOLED|POOLED|JNDI]");
            UNPOOLED– 這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)會(huì)每次請(qǐng)求時(shí)打開和關(guān)閉連接祥山。雖然有點(diǎn)慢圃验,但對(duì)那些數(shù)據(jù)庫(kù)連接可用性要求不高的簡(jiǎn)單應(yīng)用程序來說,是一個(gè)很好的選擇缝呕。 性能表現(xiàn)則依賴于使用的數(shù)據(jù)庫(kù)澳窑,對(duì)某些數(shù)據(jù)庫(kù)來說,使用連接池并不重要供常,這個(gè)配置就很適合這種情形摊聋。UNPOOLED 類型的數(shù)據(jù)源僅僅需要配置以下 5 種屬性:
                driver – 這是 JDBC 驅(qū)動(dòng)的 Java 類全限定名(并不是 JDBC 驅(qū)動(dòng)中可能包含的數(shù)據(jù)源類)。
                url – 這是數(shù)據(jù)庫(kù)的 JDBC URL 地址栈暇。
                username – 登錄數(shù)據(jù)庫(kù)的用戶名麻裁。
                password – 登錄數(shù)據(jù)庫(kù)的密碼。
                defaultTransactionIsolationLevel – 默認(rèn)的連接事務(wù)隔離級(jí)別源祈。
                defaultNetworkTimeout – 等待數(shù)據(jù)庫(kù)操作完成的默認(rèn)網(wǎng)絡(luò)超時(shí)時(shí)間(單位:毫秒)煎源。查看 java.sql.Connection#setNetworkTimeout() 的 API 文檔以獲取更多信息。
            POOLED– 這種數(shù)據(jù)源的實(shí)現(xiàn)利用“池”的概念將 JDBC 連接對(duì)象組織起來香缺,避免了創(chuàng)建新的連接實(shí)例時(shí)所必需的初始化和認(rèn)證時(shí)間手销。 這種處理方式很流行,能使并發(fā) Web 應(yīng)用快速響應(yīng)請(qǐng)求图张。
                driver – 這是 JDBC 驅(qū)動(dòng)的 Java 類全限定名(并不是 JDBC 驅(qū)動(dòng)中可能包含的數(shù)據(jù)源類)原献。
                url – 這是數(shù)據(jù)庫(kù)的 JDBC URL 地址馏慨。
                username – 登錄數(shù)據(jù)庫(kù)的用戶名。
                password – 登錄數(shù)據(jù)庫(kù)的密碼姑隅。
                defaultTransactionIsolationLevel – 默認(rèn)的連接事務(wù)隔離級(jí)別写隶。
                defaultNetworkTimeout – 等待數(shù)據(jù)庫(kù)操作完成的默認(rèn)網(wǎng)絡(luò)超時(shí)時(shí)間(單位:毫秒)。查看 java.sql.Connection#setNetworkTimeout() 的 API 文檔以獲取更多信息讲仰。
                poolMaximumActiveConnections – 在任意時(shí)間可存在的活動(dòng)(正在使用)連接數(shù)量慕趴,默認(rèn)值:10
                poolMaximumIdleConnections – 任意時(shí)間可能存在的空閑連接數(shù)。
                poolMaximumCheckoutTime – 在被強(qiáng)制返回之前鄙陡,池中連接被檢出(checked out)時(shí)間冕房,默認(rèn)值:20000 毫秒(即 20 秒)
                poolTimeToWait – 這是一個(gè)底層設(shè)置,如果獲取連接花費(fèi)了相當(dāng)長(zhǎng)的時(shí)間趁矾,連接池會(huì)打印狀態(tài)日志并重新嘗試獲取一個(gè)連接(避免在誤配置的情況下一直失敗且不打印日志)耙册,默認(rèn)值:20000 毫秒(即 20 秒)。
                poolMaximumLocalBadConnectionTolerance – 這是一個(gè)關(guān)于壞連接容忍度的底層設(shè)置毫捣, 作用于每一個(gè)嘗試從緩存池獲取連接的線程详拙。 如果這個(gè)線程獲取到的是一個(gè)壞的連接,那么這個(gè)數(shù)據(jù)源允許這個(gè)線程嘗試重新獲取一個(gè)新的連接蔓同,但是這個(gè)重新嘗試的次數(shù)不應(yīng)該超過 poolMaximumIdleConnections 與 poolMaximumLocalBadConnectionTolerance 之和饶辙。 默認(rèn)值:3(新增于 3.4.5)
                poolPingQuery – 發(fā)送到數(shù)據(jù)庫(kù)的偵測(cè)查詢,用來檢驗(yàn)連接是否正常工作并準(zhǔn)備接受請(qǐng)求斑粱。默認(rèn)是“NO PING QUERY SET”弃揽,這會(huì)導(dǎo)致多數(shù)數(shù)據(jù)庫(kù)驅(qū)動(dòng)出錯(cuò)時(shí)返回恰當(dāng)?shù)腻e(cuò)誤消息。
                poolPingEnabled – 是否啟用偵測(cè)查詢则北。若開啟矿微,需要設(shè)置 poolPingQuery 屬性為一個(gè)可執(zhí)行的 SQL 語句(最好是一個(gè)速度非常快的 SQL 語句)尚揣,默認(rèn)值:false涌矢。
                poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的頻率』笸В可以被設(shè)置為和數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間一樣蒿辙,來避免不必要的偵測(cè)拇泛,默認(rèn)值:0(即所有連接每一時(shí)刻都被偵測(cè) — 當(dāng)然僅當(dāng) poolPingEnabled 為 true 時(shí)適用)滨巴。
            JNDI – 這個(gè)數(shù)據(jù)源實(shí)現(xiàn)是為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源俺叭,然后放置一個(gè) JNDI 上下文的數(shù)據(jù)源引用恭取。這種數(shù)據(jù)源配置只需要兩個(gè)屬性:
                initial_context – 這個(gè)屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))熄守。這是個(gè)可選屬性蜈垮,如果忽略耗跛,那么將會(huì)直接從 InitialContext 中尋找 data_source 屬性。
                data_source – 這是引用數(shù)據(jù)源實(shí)例位置的上下文路徑攒发。提供了 initial_context 配置時(shí)會(huì)在其返回的上下文中進(jìn)行查找调塌,沒有提供時(shí)則直接在 InitialContext 中查找。
            -->
            <dataSource type="POOLED">
                <!-- ${}由 properties 元素中設(shè)置的相應(yīng)值來替換 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 通過該配置告訴MyBatis到哪里去找到這些SQL語句 -->
    <mappers>
        <!-- 使用相對(duì)于類路徑的資源引用 -->
        <mapper resource="mapper/CategoriesMapper.xml"/>

        <!-- 使用映射器接口實(shí)現(xiàn)類的完全限定類名 -->
        <mapper class="org.mybatis.builder.AuthorMapper"/>
      
        <!-- 使用完全限定資源定位符(URL) -->
        <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    </mappers>
</configuration>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惠猿,一起剝皮案震驚了整個(gè)濱河市羔砾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偶妖,老刑警劉巖姜凄,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異趾访,居然都是意外死亡态秧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門扼鞋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來申鱼,“玉大人,你說我怎么就攤上這事藏鹊∪蠹ィ” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵盘寡,是天一觀的道長(zhǎng)楚殿。 經(jīng)常有香客問我,道長(zhǎng)竿痰,這世上最難降的妖魔是什么脆粥? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮影涉,結(jié)果婚禮上变隔,老公的妹妹穿的比我還像新娘。我一直安慰自己蟹倾,他們只是感情好匣缘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲜棠,像睡著了一般肌厨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豁陆,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天柑爸,我揣著相機(jī)與錄音,去河邊找鬼盒音。 笑死表鳍,一個(gè)胖子當(dāng)著我的面吹牛馅而,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播譬圣,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓮恭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了厘熟?” 一聲冷哼從身側(cè)響起偎血,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盯漂,沒想到半個(gè)月后颇玷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡就缆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年帖渠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竭宰。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡空郊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出切揭,到底是詐尸還是另有隱情狞甚,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布廓旬,位于F島的核電站哼审,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏孕豹。R本人自食惡果不足惜涩盾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望励背。 院中可真熱鬧春霍,春花似錦、人聲如沸叶眉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衅疙。三九已至莲趣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炼蛤,已是汗流浹背妖爷。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工蝶涩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留理朋,地道東北人絮识。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗽上,于是被迫代替她去往敵國(guó)和親次舌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容