MyBatis-SQLSessionFactory 配置文件解析

SQLSessionFactory 配置文件解析

在入門文章里灿意,配置了兩個 xml 文件伯顶,本文來解析 SQLSessionFactory 的環(huán)境配置文件李滴。在前文中命名未 conf.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>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"/>
            <!-- 配置數(shù)據(jù)庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=true"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <mapper resource="userMapper.xml" />
    </mappers>
</configuration>

下面來解析一下 <configuration></configuration> 里面的一些內(nèi)容觉义。

environments

MyBatis可以配置多種環(huán)境设拟,這會幫助你將 SQL 映射應(yīng)用于多種數(shù)據(jù)庫之中慨仿。例如測試和生產(chǎn)環(huán)境∧呻剩或者你可能有多重生產(chǎn)級數(shù)據(jù)庫卻共享相同的模式镰吆,所以你會想到對不同數(shù)據(jù)庫使用相同的SQL映射。

但是配置多種環(huán)境跑慕,只能為每個SqlSessionFactory實(shí)例選擇一個万皿。

我們之前在文中加載環(huán)境配置文件的方法是:

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

其實(shí)該 build 有其他的重載方法。其中有配置環(huán)境參數(shù)的方法

public SqlSessionFactory build(InputStream inputStream, String environment) {
        return this.build((InputStream)inputStream, environment, (Properties)null);
    }

即傳入 environment 核行,指定的 environment 被綁定到 SqlSessionFactory 牢硅;如果不傳入 environment ,default 指定的 environment 被綁定到 SqlSessionFactory芝雪。

1 transactionManager

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

  • JDBC—-這個配置直接簡單使用了JDBC的提交和回滾設(shè)置位岔,它依賴于數(shù)據(jù)源得到的連接來管理事物范圍
  • MANAGED—-這個配置幾乎不做什么。它從來不提交或回滾一個連接堡牡,而它會讓容器來管理事物的整個生命周期(比如Spring或J2EE應(yīng)用服務(wù)器的上下文)抒抬,默認(rèn)情況下它會關(guān)閉連接,然而一些容器并不希望這樣晤柄,因此如果你需要從連接中停止它擦剑,將closeConnection屬性設(shè)置為false.
<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager><transactionManager type="MANAGED">

2 dataSource

dataSource 元素使用基本的 JDBC 數(shù)據(jù)源接口來配置 JDBC 連接對象的資源。許多MyBatis的應(yīng)用程序?qū)凑丈厦娴氖纠齺砼渲脭?shù)據(jù)源芥颈,然而它并不是必須的惠勒,要知道為了方便使用延遲加載,數(shù)據(jù)源才是必須的浇借。有三種內(nèi)建的數(shù)據(jù)源類型(也就是type=”XXX”):

2.1 UNPOOLED

這個數(shù)據(jù)源的實(shí)現(xiàn)是每次被請求時打開和關(guān)閉連接捉撮。它有一點(diǎn)慢,這是對簡單應(yīng)用程序的一個很好的選擇妇垢,因?yàn)樗恍枰皶r的可用連接巾遭,不同的數(shù)據(jù)庫對這個的表現(xiàn)也是不一樣的肉康,所以對某些數(shù)據(jù)庫來說配置數(shù)據(jù)源并不重要,這個配置也是閑置的灼舍。UNPOOLED 類型的數(shù)據(jù)源僅僅用來配置以下六種屬性:

  • driver—-這是JDBC驅(qū)動的Java類的完全限定名
  • url—-這是數(shù)據(jù)庫的JDBC URL地址
  • username—-登陸數(shù)據(jù)庫的用戶名
  • password—-登錄數(shù)據(jù)庫的密碼
  • defaultTransactionIsolationLevel—-默認(rèn)的連接事物隔離級別
  • driver.encoding—-傳遞數(shù)據(jù)庫驅(qū)動的屬性吼和,前綴以”driver.”開頭即可,”driver.encoding”表示的就是傳遞 encoding 屬性
2.2 POOLED

這是 JDBC 連接對象的數(shù)據(jù)源連接池的實(shí)現(xiàn)骑素,用來避免創(chuàng)建新的連接實(shí)例時必要的連接和認(rèn)證時間炫乓。這是一種當(dāng)前 Web 應(yīng)用程序用來快速響應(yīng)請求的很流行的方法。除了上述(UNPOOLED)的屬性之外献丑,還有些別的屬性可以用來配置 POOLED 數(shù)據(jù)源:

  • poolMaximumActiveConnections—-在任意時間存在的活動(也就是正在使用)連接的數(shù)量末捣,默認(rèn)值為10
  • poolMaximumIdleConnections—-任意時間存在的空閑連接數(shù)
  • poolMaximumCheckoutTime—-在被強(qiáng)制返回之前,池中連接被檢查的時間创橄,默認(rèn)值為2000毫秒也就是20秒
  • poolTimeToWait箩做、poolPingQuery、poolPingEnabled妥畏、poolPingConnectionsNotUsedFor—-這些都是一些偵測數(shù)據(jù)庫連接的屬性
2.3 JNDI

這個數(shù)據(jù)源的實(shí)現(xiàn)是為了使用如 Spring 或應(yīng)用服務(wù)器這類的容器邦邦,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個 JNDI 上下文的引用醉蚁。這個數(shù)據(jù)源只需要兩個屬性:

  • initial_context—-從初始上下文尋找環(huán)境燃辖,這個是可選屬性,如果被忽略网棍,那么 data_source 屬性將會直接以 initialContext 為背景再次尋找
  • data_source—-這是引用數(shù)據(jù)源實(shí)例位置的上下文路徑黔龟,它會以由 initial_context 查詢返回的環(huán)境為背景來查找,如果 initial_context 沒有返回結(jié)果時确沸,直接以初始上下文為環(huán)境來查找

和其它數(shù)據(jù)源配置相似捌锭,它也可以通過名為”env.”的前綴直接向初始上下文發(fā)送屬性。

3 mappers

MyBatis 的行為已經(jīng)由上述元素配置好罗捎,下面是告訴 MyBatis 到哪里找到 SQL 的映射文件±埽可以通過使用相對路徑的資源引用桨菜,或者字符表示,或者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>

4 settings

下面多講一個屬性倒得,這個屬性可以不在config.xml中出現(xiàn),但是比較重要

settings夭禽,是非常重要的參數(shù)霞掺,它們會改變MyBatis在運(yùn)行時的行為方式禀崖。這面這個表格描述了設(shè)置信息沐绒,它們的含義和默認(rèn)值:

參數(shù)設(shè)置 描述 有效值 默認(rèn)值
cachedEnabled 用于配置使全局的映射器啟用或禁止緩存 true false true
lazyLoadingEnabled 全局啟用或禁用延遲加載宅楞。當(dāng)禁用時,所有關(guān)聯(lián)對象都會即時加載 true false true
aggressiveLazyLoading 當(dāng)啟用時狈究,有延遲加載屬性的對象在被調(diào)用時將會完全加載任任意屬性,否則每種屬性將會按需要加載 true false true
multipleResultSetsEnabled 允許或不允許多種結(jié)果集從一個單獨(dú)的語句中返回(需要合適的驅(qū)動) true false true
useColumnLabel 使用列標(biāo)簽代替列名艘策。不同的驅(qū)動在這方面表現(xiàn)不同系草,參考驅(qū)動文檔或充分測試兩種方法來決定所使用的驅(qū)動 true false true
useGeneratedKeys 允許JDBC支持生成的鍵,需要合適的驅(qū)動耙旦。如果設(shè)置為true則這個驅(qū)動強(qiáng)制生成的鍵被使用脱羡,盡管一些驅(qū)動拒絕兼容但仍然有效。 true false true
autoMappingBehavior 指定MyBatis如何自動映射列到字段/屬性PARTIAL只會自動映射簡單免都、沒有嵌套的結(jié)果锉罐。FULL會自動映射任意復(fù)雜的結(jié)果。 NONE PARTIAL FULL PARTIAL
defaultExecutorType 配置默認(rèn)的執(zhí)行器绕娘。SIMPLE執(zhí)行器沒有什么特別之處氓鄙,REUSE執(zhí)行器重用預(yù)處理語句,BATCH執(zhí)行器重用語句和批量更新业舍。 SIMPLE REUSE BATCH SIMPLE
defaultStatementTimeout 設(shè)置超時時間抖拦,它決定驅(qū)動等待一個數(shù)據(jù)庫響應(yīng)的時間。 任何正整數(shù) Not Set(null)

完整的設(shè)置信息元素的示例配置如下:

<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>

主要的配置信息就是上面這些舷暮,前三個比較重要态罪,settings 屬于高級設(shè)置.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市下面,隨后出現(xiàn)的幾起案子复颈,更是在濱河造成了極大的恐慌,老刑警劉巖沥割,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耗啦,死亡現(xiàn)場離奇詭異,居然都是意外死亡机杜,警方通過查閱死者的電腦和手機(jī)帜讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椒拗,“玉大人似将,你說我怎么就攤上這事∈纯粒” “怎么了在验?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長堵未。 經(jīng)常有香客問我腋舌,道長,這世上最難降的妖魔是什么渗蟹? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任块饺,我火速辦了婚禮赞辩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刨沦。我一直安慰自己诗宣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布想诅。 她就那樣靜靜地躺著召庞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪来破。 梳的紋絲不亂的頭發(fā)上篮灼,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音徘禁,去河邊找鬼诅诱。 笑死,一個胖子當(dāng)著我的面吹牛送朱,可吹牛的內(nèi)容都是我干的娘荡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驶沼,長吁一口氣:“原來是場噩夢啊……” “哼炮沐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起回怜,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤大年,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玉雾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翔试,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年复旬,在試婚紗的時候發(fā)現(xiàn)自己被綠了垦缅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡赢底,死狀恐怖失都,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幸冻,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布咳焚,位于F島的核電站洽损,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏革半。R本人自食惡果不足惜碑定,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一流码、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧延刘,春花似錦漫试、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至普泡,卻和暖如春播掷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撼班。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工歧匈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砰嘁。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓件炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矮湘。 傳聞我的和親對象是個殘疾皇子斟冕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL板祝、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,523評論 0 4
  • MyBatis 理論篇 [TOC] 什么是MyBatis ?MyBatis是支持普通SQL查詢,存儲過程和高級映射...
    有_味閱讀 2,904評論 0 26
  • MyBatis 的配置文件包含了會深深影響 MyBatis 行為的設(shè)置(settings)和屬性(properti...
    淡然_匆匆閱讀 641評論 0 1
  • 參考w3c 教程 1.概述 MyBatis 是支持定制化SQL宫静、存儲過程以及高級映射的優(yōu)秀的持久層框架。MyBat...
    王偵閱讀 418評論 0 0
  • MyBatis 的配置文件包含了影響 MyBatis 行為甚深的設(shè)置(settings)和屬性(propertie...
    WesleyLien閱讀 574評論 0 0