JavaEE基礎(chǔ)知識(shí)學(xué)習(xí)----MyBatis(二)全局配置文件

MyBatis的全局配置文件

概述

MyBatis的全局配置文件可以配置的屬性如下

  • properties 屬性
  • settings 設(shè)置
  • typeAliases 類型別名
  • typeHandlers 類型處理器
  • objectFactory 對(duì)象工廠
  • plugins 插件
  • environments 環(huán)境
    • environment 環(huán)境變量
      • transactionManager 事務(wù)管理器
      • dataSource 數(shù)據(jù)源
  • databaseIdProvider 數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)
  • mappers 映射器

properties屬性

MyBatis使用properties來(lái)引入外部properties配置文件的內(nèi)容系草,resource:引入類路徑下的資源碍论,url引入網(wǎng)絡(luò)路徑或者磁盤(pán)路徑下的資源《ㄒ常可以用于將數(shù)據(jù)源連接信息放在properties文件中踢械,與Spring整合后就寫(xiě)在Spring的配置文件中酗电。

引入外部properties文件

<properties resource="org/mybatis/example/config.properties"></properties>

使用引入的properties文件

<dataSource type="POOLED">
  <property name="driver" value="${jdbc.driver}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
</dataSource>

settings運(yùn)行時(shí)設(shè)置

這是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會(huì)改變 MyBatis 的運(yùn)行時(shí)行為内列。下表描述了設(shè)置中各項(xiàng)的意圖撵术、默認(rèn)值等。

設(shè)置參數(shù) 描述 有效值 默認(rèn)值
cacheEnabled 全局開(kāi)啟或關(guān)閉配置文件中的所有映射器任何緩存 true | false true
lazyLoadingEnabled 延遲加載的全局開(kāi)關(guān) true | false false
aggressive<br />LazyLoading 開(kāi)啟德绿,任何方法的調(diào)用都會(huì)加載該對(duì)象的所有屬性荷荤。<br />否則,每個(gè)屬性會(huì)按需加載 true | false false
multipleResult<br />SetsEnabled 是否允許單一語(yǔ)句返回多結(jié)果集 true | false true
useColumnLabel 使用列標(biāo)簽代替列名移稳。 true | false true
useGeneratedKeys 允許 JDBC 支持自動(dòng)生成主鍵<br /> 如果設(shè)置為 true 則這個(gè)設(shè)置強(qiáng)制使用自動(dòng)生成主鍵 true | false False
autoMappingBehavior 指定 MyBatis 應(yīng)如何自動(dòng)映射列到字段或?qū)傩浴?lt;br /> NONE 表示取消自動(dòng)映射蕴纳;<br />PARTIAL 只會(huì)自動(dòng)映射沒(méi)有定義嵌套結(jié)果集映射的結(jié)果集。<br /> FULL 會(huì)自動(dòng)映射任意復(fù)雜的結(jié)果集 NONE,
PARTIAL,
FULL
PARTIAL
autoMapping<br />Unknown<br />ColumnBehavior 指定發(fā)現(xiàn)自動(dòng)映射目標(biāo)未知列(或者未知屬性類型)的行為个粱。<br />NONE: 不做任何反應(yīng)<br />WARNING: 輸出提醒 NONE, WARNING, FAILING NONE
defaultExecutorType 配置默認(rèn)的執(zhí)行器古毛。SIMPLE 就是普通的執(zhí)行器;REUSE 執(zhí)行器會(huì)重用預(yù)處理語(yǔ)句(prepared statements); BATCH 執(zhí)行器將重用語(yǔ)句并執(zhí)行批量更新稻薇。 SIMPLE REUSE BATCH SIMPLE
default<br />StatementTimeout 設(shè)置超時(shí)時(shí)間嫂冻,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫(kù)響應(yīng)的秒數(shù)。 任意正整數(shù)
defaultFetchSize 為驅(qū)動(dòng)的結(jié)果集獲取數(shù)量(fetchSize)設(shè)置一個(gè)提示值塞椎。此參數(shù)只可以在查詢?cè)O(shè)置中被覆蓋桨仿。 任意正整數(shù)
safeRow<br />BoundsEnabled 允許在嵌套語(yǔ)句中使用分頁(yè)(RowBounds)。如果允許使用則設(shè)置為false案狠。 true | false False
safeResult<br />HandlerEnabled 允許在嵌套語(yǔ)句中使用分頁(yè)(ResultHandler)服傍。如果允許使用則設(shè)置為false。 true | false True
mapUnderscore<br />ToCamelCase 是否開(kāi)啟自動(dòng)駝峰命名規(guī)則(camel case)映射骂铁,即從經(jīng)典數(shù)據(jù)庫(kù)列名 A_COLUMN 到經(jīng)典 Java 屬性名 aColumn 的類似映射吹零。 true | false False
localCacheScope MyBatis 利用本地緩存機(jī)制(Local Cache)防止循環(huán)引用(circular references)和加速重復(fù)嵌套查詢。 默認(rèn)值為 SESSION拉庵,這種情況下會(huì)緩存一個(gè)會(huì)話中執(zhí)行的所有查詢灿椅。 若設(shè)置值為 STATEMENT,本地會(huì)話僅用在語(yǔ)句執(zhí)行上钞支,對(duì)相同 SqlSession 的不同調(diào)用將不會(huì)共享數(shù)據(jù)茫蛹。 SESSION |
STATEMENT
SESSION
jdbcTypeForNull 當(dāng)沒(méi)有為參數(shù)提供特定的 JDBC 類型時(shí),為空值指定 JDBC 類型伸辟。 某些驅(qū)動(dòng)需要指定列的 JDBC 類型麻惶,多數(shù)情況直接用一般類型即可,比如 NULL信夫、VARCHAR 或 OTHER窃蹋。 OTHER
lazyLoadTrigger<br />Methods 指定哪個(gè)對(duì)象的方法觸發(fā)一次延遲加載。
defaultScripting<br />Language 指定動(dòng)態(tài) SQL 生成的默認(rèn)語(yǔ)言静稻。
defaultEnum<br />TypeHandler 指定 Enum 使用的默認(rèn) TypeHandler 警没。 (從3.4.5開(kāi)始)
callSettersOnNulls 指定當(dāng)結(jié)果集中值為 null 的時(shí)候是否調(diào)用映射對(duì)象的 setter(map 對(duì)象時(shí)為 put)方法,這對(duì)于有 Map.keySet() 依賴或 null 值初始化的時(shí)候是有用的振湾。注意基本類型(int杀迹、boolean等)是不能設(shè)置成 null 的。 true | false false
returnInstance<br />ForEmptyRow 當(dāng)返回行的所有列都是空時(shí)押搪,MyBatis默認(rèn)返回null树酪。 當(dāng)開(kāi)啟這個(gè)設(shè)置時(shí),MyBatis會(huì)返回一個(gè)空實(shí)例大州。 請(qǐng)注意续语,它也適用于嵌套的結(jié)果集 (i.e. collectioin and association)。(從3.4.2開(kāi)始) true | false false
logPrefix 指定 MyBatis 增加到日志名稱的前綴厦画。 任何字符串
logImpl 指定 MyBatis 所用日志的具體實(shí)現(xiàn)疮茄,未指定時(shí)將自動(dòng)查找滥朱。
proxyFactory 指定 Mybatis 創(chuàng)建具有延遲加載能力的對(duì)象用到的代理工具。 CGLIB | JAVASSIST

常用的Setting設(shè)置

設(shè)置參數(shù) 描述 默認(rèn)值
mapUnderscoreToCamelCase 是否開(kāi)啟駝峰命名規(guī)則映射A_COLUNM到aColumn false
defaultStatementTimeout 設(shè)置超時(shí)時(shí)間力试,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫(kù)響應(yīng)的秒數(shù)

Settings設(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="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

typeAliases別名

類型別名是為 Java 類型設(shè)置一個(gè)短的名字徙邻。它只和 XML 配置有關(guān),存在的意義僅在于用來(lái)減少類完全限定名的冗余,但是往往我們不會(huì)使用別名畸裳,是為了方便查看代碼缰犁。

<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躯畴,給包和子包下的所有類起一個(gè)默認(rèn)的別名(類名小寫(xiě))

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

每一個(gè)在包 domain.blog 中的 Java Bean民鼓,在沒(méi)有注解的情況下,會(huì)使用 Bean 的首字母小寫(xiě)的非限定類名來(lái)作為它的別名蓬抄。 比如 domain.blog.Author 的別名為 author;若有注解夯到,則別名為其注解值嚷缭。

@Alias("author")
public class Author {}

typeHandlers 類型處理器

無(wú)論是 MyBatis 在預(yù)處理語(yǔ)句(PreparedStatement)中設(shè)置一個(gè)參數(shù)時(shí),還是從結(jié)果集中取出一個(gè)值時(shí)耍贾, 都會(huì)用類型處理器將獲取的值以合適的方式轉(zhuǎn)換成 Java 類型阅爽。下表描述了一些默認(rèn)的類型處理器。

類型處理器 Java類型 JDBC類型
BooleanTypeHandler java.lang.Boolean, boolean 數(shù)據(jù)庫(kù)兼容的 BOOLEAN
ByteTypeHandler java.lang.Byte, byte 數(shù)據(jù)庫(kù)兼容的 NUMERICBYTE
ShortTypeHandler java.lang.Short, short 數(shù)據(jù)庫(kù)兼容的 NUMERICSHORT INTEGER
IntegerTypeHandler java.lang.Integer, int 數(shù)據(jù)庫(kù)兼容的 NUMERICINTEGER
LongTypeHandler java.lang.Long, long 數(shù)據(jù)庫(kù)兼容的 NUMERICLONG INTEGER
FloatTypeHandler java.lang.Float, float 數(shù)據(jù)庫(kù)兼容的 NUMERICFLOAT
DoubleTypeHandler java.lang.Double, double 數(shù)據(jù)庫(kù)兼容的 NUMERICDOUBLE
BigDecimalTypeHandler java.math.BigDecimal 數(shù)據(jù)庫(kù)兼容的 NUMERICDECIMAL
StringTypeHandler java.lang.String CHAR, VARCHAR
ClobReaderTypeHandler java.io.Reader -
ClobTypeHandler java.lang.String CLOB, LONGVARCHAR
NStringTypeHandler java.lang.String NVARCHAR, NCHAR
NClobTypeHandler java.lang.String NCLOB
BlobInputStreamTypeHandler java.io.InputStream -
ByteArrayTypeHandler byte[] 數(shù)據(jù)庫(kù)兼容的字節(jié)流類型
BlobTypeHandler byte[] BLOB, LONGVARBINARY
DateTypeHandler java.util.Date TIMESTAMP
DateOnlyTypeHandler java.util.Date DATE
TimeOnlyTypeHandler java.util.Date TIME
SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP
SqlDateTypeHandler java.sql.Date DATE
SqlTimeTypeHandler java.sql.Time TIME
ObjectTypeHandler Any OTHER 或未指定類型
EnumTypeHandler Enumeration Type VARCHAR-任何兼容的字符串類型荐开,存儲(chǔ)枚舉的名稱(而不是索引)
EnumOrdinalTypeHandler Enumeration Type 任何兼容的 NUMERICDOUBLE 類型付翁,存儲(chǔ)枚舉的索引(而不是名稱)。
InstantTypeHandler java.time.Instant TIMESTAMP
LocalDateTimeTypeHandler java.time.LocalDateTime TIMESTAMP
LocalDateTypeHandler java.time.LocalDate DATE
LocalTimeTypeHandler java.time.LocalTime TIME
OffsetDateTimeTypeHandler java.time.OffsetDateTime TIMESTAMP
OffsetTimeTypeHandler java.time.OffsetTime TIME
ZonedDateTimeTypeHandler java.time.ZonedDateTime TIMESTAMP
YearTypeHandler java.time.Year INTEGER
MonthTypeHandler java.time.Month INTEGER
YearMonthTypeHandler java.time.YearMonth VARCHAR or LONGVARCHAR
JapaneseDateTypeHandler java.time.chrono.JapaneseDate DATE

plugins插件

MyBatis 允許你在已映射語(yǔ)句執(zhí)行過(guò)程中的某一點(diǎn)進(jìn)行攔截調(diào)用晃听。默認(rèn)情況下百侧,MyBatis 允許使用插件來(lái)攔截的方法調(diào)用

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

environments環(huán)境配置

MyBatis可以配置多種環(huán)境,default代表指定使用某種環(huán)境能扒,這樣就可以快速切換環(huán)境佣渴,盡管可以配置多個(gè)環(huán)境,每個(gè) SqlSessionFactory 實(shí)例只能選擇其一 初斑,所以辛润,如果你想連接兩個(gè)數(shù)據(jù)庫(kù),就需要?jiǎng)?chuàng)建兩個(gè) SqlSessionFactory 實(shí)例见秤,每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)砂竖。而如果是三個(gè)數(shù)據(jù)庫(kù),就需要三個(gè)實(shí)例 鹃答。每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè) SqlSessionFactory 實(shí)例

環(huán)境配置實(shí)例

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
  </environment>
</environments>

環(huán)境配置說(shuō)明

  • 默認(rèn)的環(huán)境 ID(比如:default="development")乎澄。
  • 每個(gè) environment 元素定義的環(huán)境 ID(比如:id="development")。
  • 事務(wù)管理器的配置(比如:type="JDBC")挣跋。
  • 數(shù)據(jù)源的配置(比如:type="POOLED")三圆。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舟肉,更是在濱河造成了極大的恐慌修噪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件路媚,死亡現(xiàn)場(chǎng)離奇詭異黄琼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)整慎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)脏款,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人裤园,你說(shuō)我怎么就攤上這事撤师。” “怎么了拧揽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵剃盾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我淤袜,道長(zhǎng)痒谴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任铡羡,我火速辦了婚禮积蔚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烦周。我一直安慰自己尽爆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布论矾。 她就那樣靜靜地躺著教翩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贪壳。 梳的紋絲不亂的頭發(fā)上饱亿,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音闰靴,去河邊找鬼彪笼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚂且,可吹牛的內(nèi)容都是我干的配猫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼杏死,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泵肄!你這毒婦竟也來(lái)了捆交?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腐巢,失蹤者是張志新(化名)和其女友劉穎品追,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體冯丙,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肉瓦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胃惜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泞莉。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖船殉,靈堂內(nèi)的尸體忽然破棺而出鲫趁,到底是詐尸還是另有隱情,我是刑警寧澤利虫,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布饮寞,位于F島的核電站,受9級(jí)特大地震影響列吼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苦始,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一寞钥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陌选,春花似錦理郑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至役电,卻和暖如春赚爵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背法瑟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工冀膝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霎挟。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓窝剖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酥夭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赐纱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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