接下來先全局的說一下MyBatis的mybatis-config的settings屬性說明。
configuration 的映射文件(根據定義順序說明)
- properties 屬性
- settings 設置
- typeAliases 類型別名
- typeHandlers 類型處理器
- objectFactory 對象工廠
- objectWrapperFactory MyBatis對基本類型, 基本對象map和集合的封裝.
- reflectorFactory 反射模塊工廠
- plugins 插件
- environments 環境配置
- databaseIdProvider 數據庫廠商標識
- mappers 映射器
settings 設置 (根據XMLConfigBuilder 配置順序)
這個是MyBatis的重要配置之一, 而且還會改變它在運行過程中如何處理的行為,可以通過org.apache.ibatis.builder.xml.XMLConfigBuilder 查看, settings的參數如下:
本次實例中的代碼都是最終的默認屬性配置。 不是默認的我會截圖給出效果。
autoMappingBehavior 默認值為: PARTIAL
指定 MyBatis 應如何自動映射列到字段或屬性。NONE 表示取消自動映射;PARTIAL 只會自動映射沒有定義嵌套結果集映射的結果集。 FULL 會自動映射任意複雜的結果集(無論是否嵌套)。
autoMappingUnknownColumnBehavior 默認值:NONE
指定發現自動映射目標未知列(或者未知屬性類型)的行為。
- NONE: 不做任何反應
- WARNING: 輸出提醒日誌 ('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日誌等級必須設置為 WARN)
- FAILING: 映射失敗 (拋出 SqlSessionException)
等於NONE的時候, 如果存在不存在的列, 會直接輸出存在的不存在的會直接忽略掉。
等於WARNING的時候,其中裡面的test列示不存在的, 通過sql構建出來的。 會如下的提示:
等於FAILING的時候, 會如下的提示:
所以,你可以根據你自己的需求情況填寫對應的格式類型。
cacheEnabled 默認值: true
全局地開啟或關閉配置文件中的所有映射器已經配置的任何緩存。就只有兩個值, 一般情況下就是用默認值。
proxyFactory 默認值: JAVASSIST (MyBatis 3.3 以上)
指定 Mybatis 創建具有延遲加載能力的對象所用到的代理工具。包含: CGLIB | JAVASSIST
lazyLoadingEnabled 默認值: false
延遲加載的全局開關。當開啟時,所有關聯對象都會延遲加載。 特定關聯關係中可通過設置 fetchType 屬性來覆蓋該項的開關狀態。
aggressiveLazyLoading 默認值:false (在 3.4.1 及之前的版本默認值為 true)
當開啟時,任何方法的調用都會加載該對象的所有屬性。 否則,每個屬性會按需加載(參考 lazyLoadTriggerMethods)。
multipleResultSetsEnabled 默認值: true
是否允許單一語句返回多結果集(需要驅動支持)。
useColumnLabel 默認值: true
使用列標籤代替列名。不同的驅動在這方面會有不同的表現,具體可參考相關驅動文檔或通過測試這兩種不同的模式來觀察所用驅動的結果。
useGeneratedKeys 默認值: false
允許 JDBC 支持自動生成主鍵,需要驅動支持。 如果設置為 true 則這個設置強制使用自動生成主鍵,儘管一些驅動不能支持但仍可正常工作(比如 Derby)。
defaultExecutorType 默認值: SIMPLE
配置默認的執行器。SIMPLE 就是普通的執行器;REUSE 執行器會重用預處理語句(prepared statements); BATCH 執行器將重用語句並執行批量更新。
defaultStatementTimeout 默認值: 未設置 (null)
設置超時時間,它決定驅動等待數據庫響應的秒數。 單位任意正整數。
defaultFetchSize 默認值: 未設置 (null)
為驅動的結果集獲取數量(fetchSize)設置一個提示值。此參數只可以在查詢設置中被覆蓋。單位任意正整數。
defaultResultSetType 默認為: 未設置。
根據語句設置忽略每條statement設置。參數包含: FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(same behavior with 'Not Set')
mapUnderscoreToCamelCase 默認值: false
是否開啟自動駝峰命名規則(camel case)映射,即從經典數據庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似映射。
safeRowBoundsEnabled 默認值: false
允許在嵌套語句中使用分頁(RowBounds)。如果允許使用則設置為 false。
localCacheScope 默認值:SESSION
MyBatis 利用本地緩存機制(Local Cache)防止循環引用(circular references)和加速重複嵌套查詢。 默認值為 SESSION,這種情況下會緩存一個會話中執行的所有查詢。 若設置值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共享數據。
jdbcTypeForNull 默認值: OTHER
當沒有為參數提供特定的 JDBC 類型時,為空值指定 JDBC 類型。 某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER。
lazyLoadTriggerMethods 參數: equals,clone,hashCode,toString
指定哪個對象的方法觸發一次延遲加載。用逗號分隔的方法列表。
safeResultHandlerEnabled 默認值: true
允許在嵌套語句中使用分頁(ResultHandler)。如果允許使用則設置為 false。
defaultScriptingLanguage
指定動態 SQL 生成的默認語言。 一個類型別名或完全限定類名。類路徑為: org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
defaultEnumTypeHandler
指定 Enum 使用的默認 TypeHandler 。(新增於 3.4.5) 一個類型別名或完全限定類名。 類路徑為: org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls 默認值: false
指定當結果集中值為 null 的時候是否調用映射對象的 setter(map 對象時為 put)方法,這在依賴於 Map.keySet() 或 null 值初始化的時候比較有用。注意基本類型(int、boolean 等)是不能設置成 null 的。
useActualParamName 默認值: true
允許使用方法簽名中的名稱作為語句參數名稱。 為了使用該特性,你的項目必須採用 Java 8 編譯,並且加上 -parameters 選項。(新增於 3.4.1)
returnInstanceForEmptyRow 默認值: false
當返回行的所有列都是空時,MyBatis默認返回 null。 當開啟這個設置時,MyBatis會返回一個空實例。 請注意,它也適用於嵌套的結果集 (如集合或關聯)。(新增於 3.4.2)
logPrefix 默認值: 未設置
指定 MyBatis 增加到日誌名稱的前綴。參數為: 任意字符串。
configurationFactory 默認值: 未設置
指定一個提供 Configuration 實例的類。 這個被返回的 Configuration 實例用來加載被反序列化對象的延遲加載屬性值。 這個類必須包含一個簽名為static Configuration getConfiguration() 的方法。(新增於 3.2.3) 類名或者全類名。
一個完整的案例示例, 代碼如下:
<code><settings> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting> <setting>/<settings>/<code>
上面的很多實例, 現在進行深入分析有點過早, 很多知識點沒有辦法延申, 後續在具體用到的時候, 會深入具體說明使用場景。
很多的MyBatis的settings設置, 都是官方給定了默認的實現, 而且能夠適用大多數的場景。 後續會說明如何自定義實現的方式。
感謝閱讀, 關注我查看更多更全的文章。
全部代碼已經上傳到Github
GitHub地址: https://github.com/xymiao/mybatis3
本篇代碼地址: https://github.com/xymiao/mybatis3/tree/master/mybatis3_04_mybatis_config_settings
閱讀更多 小沐學學學 的文章