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

MyBatis的全局配置文件

概述

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

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

properties屬性

MyBatis使用properties來引入外部properties配置文件的內(nèi)容,resource:引入類路徑下的資源,url引入網(wǎng)絡(luò)路徑或者磁盤路徑下的資源??梢杂糜趯?shù)據(jù)源連接信息放在properties文件中,與Spring整合后就寫在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 全局開啟或關(guān)閉配置文件中的所有映射器任何緩存 true | false true
lazyLoadingEnabled 延遲加載的全局開關(guān) true | false false
aggressive<br />LazyLoading 開啟,任何方法的調(diào)用都會(huì)加載該對象的所有屬性。<br />否則,每個(gè)屬性會(huì)按需加載 true | false false
multipleResult<br />SetsEnabled 是否允許單一語句返回多結(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)映射沒有定義嵌套結(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ù)處理語句(prepared statements); BATCH 執(zhí)行器將重用語句并執(zhí)行批量更新。 SIMPLE REUSE BATCH SIMPLE
default<br />StatementTimeout 設(shè)置超時(shí)時(shí)間,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫響應(yīng)的秒數(shù)。 任意正整數(shù)
defaultFetchSize 為驅(qū)動(dòng)的結(jié)果集獲取數(shù)量(fetchSize)設(shè)置一個(gè)提示值。此參數(shù)只可以在查詢設(shè)置中被覆蓋。 任意正整數(shù)
safeRow<br />BoundsEnabled 允許在嵌套語句中使用分頁(RowBounds)。如果允許使用則設(shè)置為false。 true | false False
safeResult<br />HandlerEnabled 允許在嵌套語句中使用分頁(ResultHandler)。如果允許使用則設(shè)置為false。 true | false True
mapUnderscore<br />ToCamelCase 是否開啟自動(dòng)駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫列名 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ì)話僅用在語句執(zhí)行上,對相同 SqlSession 的不同調(diào)用將不會(huì)共享數(shù)據(jù)。 SESSION |
STATEMENT
SESSION
jdbcTypeForNull 當(dāng)沒有為參數(shù)提供特定的 JDBC 類型時(shí),為空值指定 JDBC 類型。 某些驅(qū)動(dòng)需要指定列的 JDBC 類型,多數(shù)情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER。 OTHER
lazyLoadTrigger<br />Methods 指定哪個(gè)對象的方法觸發(fā)一次延遲加載。
defaultScripting<br />Language 指定動(dòng)態(tài) SQL 生成的默認(rèn)語言。
defaultEnum<br />TypeHandler 指定 Enum 使用的默認(rèn) TypeHandler 。 (從3.4.5開始)
callSettersOnNulls 指定當(dāng)結(jié)果集中值為 null 的時(shí)候是否調(diào)用映射對象的 setter(map 對象時(shí)為 put)方法,這對于有 Map.keySet() 依賴或 null 值初始化的時(shí)候是有用的。注意基本類型(int、boolean等)是不能設(shè)置成 null 的。 true | false false
returnInstance<br />ForEmptyRow 當(dāng)返回行的所有列都是空時(shí),MyBatis默認(rèn)返回null。 當(dāng)開啟這個(gè)設(shè)置時(shí),MyBatis會(huì)返回一個(gè)空實(shí)例。 請注意,它也適用于嵌套的結(jié)果集 (i.e. collectioin and association)。(從3.4.2開始) true | false false
logPrefix 指定 MyBatis 增加到日志名稱的前綴。 任何字符串
logImpl 指定 MyBatis 所用日志的具體實(shí)現(xiàn),未指定時(shí)將自動(dòng)查找。
proxyFactory 指定 Mybatis 創(chuàng)建具有延遲加載能力的對象用到的代理工具。 CGLIB | JAVASSIST

常用的Setting設(shè)置

設(shè)置參數(shù) 描述 默認(rèn)值
mapUnderscoreToCamelCase 是否開啟駝峰命名規(guī)則映射A_COLUNM到aColumn false
defaultStatementTimeout 設(shè)置超時(shí)時(shí)間,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫響應(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),存在的意義僅在于用來減少類完全限定名的冗余,但是往往我們不會(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)的別名(類名小寫)

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

每一個(gè)在包 domain.blog 中的 Java Bean,在沒有注解的情況下,會(huì)使用 Bean 的首字母小寫的非限定類名來作為它的別名。 比如 domain.blog.Author 的別名為 author;若有注解,則別名為其注解值。

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

typeHandlers 類型處理器

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

類型處理器 Java類型 JDBC類型
BooleanTypeHandler java.lang.Boolean, boolean 數(shù)據(jù)庫兼容的 BOOLEAN
ByteTypeHandler java.lang.Byte, byte 數(shù)據(jù)庫兼容的 NUMERICBYTE
ShortTypeHandler java.lang.Short, short 數(shù)據(jù)庫兼容的 NUMERICSHORT INTEGER
IntegerTypeHandler java.lang.Integer, int 數(shù)據(jù)庫兼容的 NUMERICINTEGER
LongTypeHandler java.lang.Long, long 數(shù)據(jù)庫兼容的 NUMERICLONG INTEGER
FloatTypeHandler java.lang.Float, float 數(shù)據(jù)庫兼容的 NUMERICFLOAT
DoubleTypeHandler java.lang.Double, double 數(shù)據(jù)庫兼容的 NUMERICDOUBLE
BigDecimalTypeHandler java.math.BigDecimal 數(shù)據(jù)庫兼容的 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ù)庫兼容的字節(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 允許你在已映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用。默認(rèn)情況下,MyBatis 允許使用插件來攔截的方法調(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ù)庫,就需要?jiǎng)?chuàng)建兩個(gè) SqlSessionFactory 實(shí)例,每個(gè)數(shù)據(jù)庫對應(yīng)一個(gè)。而如果是三個(gè)數(shù)據(jù)庫,就需要三個(gè)實(shí)例 。每個(gè)數(shù)據(jù)庫對應(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)境配置說明

  • 默認(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,280評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評論 19 139
  • Java數(shù)據(jù)持久化之mybatis 一. mybatis簡介 1.1 原始的JDBC操作: Java 通過 Jav...
    小Q逛逛閱讀 5,441評論 0 16
  • 初一2班的經(jīng)線與經(jīng)度這一小節(jié)被聽課了。我事先并不知道,上課的時(shí)候,胡老師跟著我來到了教室。內(nèi)心一陣忐忑。 到教室時(shí)...
    馱星星閱讀 369評論 0 0
  • 許攸也是曹操的老朋友。年少之時(shí),兩人交好。兩人好到什么程度呢?好到可以相約一起搞革命,去造反。公元 184 年,許...
    梅話三弄閱讀 1,037評論 5 10

友情鏈接更多精彩內(nèi)容