MyBatis中settings屬性配置詳解
在 MyBatis 中 settings 是最復雜的配置,它能深刻影響 MyBatis 底層的運行,但是在大部分情況下使用默認值便可以運行,所以在大部分情況下不需要大量配置它,只需要修改一些常用的規則即可,比如自動映射、駝峰命名映射、級聯規則、是否啟動緩存、執行器(Executor)類型等。settings 配置項說明,如表 1 所示。
配置項 | 作用 | 配置選項 | 默認值 |
---|---|---|---|
cacheEnabled | 該配置影響所有映射器中配置緩存的全局開關 | true|false | true |
lazyLoadingEnabled | 延遲加載的全局開關。當開啟時,所有關聯對象都會延遲加載。在特定關聯關系中可通過設置 fetchType 屬性來覆蓋該項的開關狀態 | true|false | false |
aggressiveLazyLoading | 當啟用時,對任意延遲屬性的調用會使帶有延遲加載屬性的對象完整加載;反之,每種屬性將會按需加載 | true|felse | 版本3.4.1 (不包含) 之前 true,之后 false |
multipleResultSetsEnabled | 是否允許單一語句返回多結果集(需要兼容驅動) | true|false | true |
useColumnLabel | 使用列標簽代替列名。不同的驅動會有不同的表現,具體可參考相關驅動文檔或通過測試這兩種不同的模式來觀察所用驅動的結果 | true|false | true |
useGeneratedKeys | 允許JDBC 支持自動生成主鍵,需要驅動兼容。如果設置為 true,則這個設置強制使用自動生成主鍵,盡管一些驅動不能兼容但仍可正常工作(比如 Derby) | true|false | false |
autoMappingBehavior | 指定 MyBatis 應如何自動映射列到字段或屬性。 NONE 表示取消自動映射。 PARTIAL 表示只會自動映射,沒有定義嵌套結果集和映射結果集。 FULL 會自動映射任意復雜的結果集(無論是否嵌套) |
NONE、PARTIAL、FULL | PARTIAL |
autoMappingUnkno wnColumnBehavior | 指定自動映射當中未知列(或未知屬性類型)時的行為。 默認是不處理,只有當日志級別達到 WARN 級別或者以下,才會顯示相關日志,如果處理失敗會拋出 SqlSessionException 異常 | NONE、WARNING、FAILING | NONE |
defaultExecutorType | 配置默認的執行器。SIMPLE 是普通的執行器;REUSE 會重用預處理語句(prepared statements);BATCH 執行器將重用語句並執行批量更新 | SIMPLE、REUSE、BATCH | SIMPLE |
defaultStatementTimeout | 設置超時時間,它決定驅動等待數據庫響應的秒數 | 任何正整數 | Not Set (null) |
defaultFetchSize | 設置數據庫驅動程序默認返回的條數限制,此參數可以重新設置 | 任何正整數 | Not Set (null) |
safeRowBoundsEnabled | 允許在嵌套語句中使用分頁(RowBounds)。如果允許,設置 false | true|false | false |
safeResultHandlerEnabled | 允許在嵌套語句中使用分頁(ResultHandler)。如果允許,設置false | true|false | true |
mapUnderscoreToCamelCase | 是否開啟自動駝峰命名規則映射,即從經典數據庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似映射 | true|false | false |
localCacheScope
|
MyBatis 利用本地緩存機制(Local Cache)防止循環引用(circular references)和加速聯復嵌套査詢。 默認值為 SESSION,這種情況下會緩存一個會話中執行的所有查詢。若設置值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlScssion 的不同調用將不會共享數據 |
SESSION|STATEMENT | SESSION |
jdbcTypeForNull
|
當沒有為參數提供特定的 JDBC 類型時,為空值指定 JDBC 類型。某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER | NULL、VARCHAR、OTHER | OTHER |
lazyLoadTriggerMethods
|
指定哪個對象的方法觸發一次延遲加載 | — | equals、clone、hashCode、toString |
defaultScriptingLanguage
|
指定動態 SQL 生成的默認語言 | — | org.apache.ibatis .script.ing.xmltags .XMLDynamicLanguageDriver |
callSettersOnNulls
|
指定當結果集中值為 null 時,是否調用映射對象的 setter(map 對象時為 put)方法,這對於 Map.kcySet() 依賴或 null 值初始化時是有用的。注意,基本類型(int、boolean 等)不能設置成 null | true|false | false |
logPrefix
|
指定 MyBatis 增加到日志名稱的前綴 | 任何字符串 | Not set |
loglmpl
|
指定 MyBatis 所用日志的具體實現,未指定時將自動査找 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING |
Not set |
proxyFactory | 指定 MyBatis 創建具有延遲加栽能力的對象所用到的代理工具 | CGLIB|JAVASSIST | JAVASSIST (MyBatis 版本為 3.3 及以上的) |
vfsImpl | 指定 VFS 的實現類 | 提供 VFS 類的全限定名,如果存在多個,可以使用逗號分隔 | Not set |
useActualParamName | 允許用方法參數中聲明的實際名稱引用參數。要使用此功能,項目必須被編譯為 Java 8 參數的選擇。(從版本 3.4.1 開始可以使用) | true|false | true |
settings 的配置項很多,但是真正用到的不會太多,我們把常用的配置項研究清楚就可以了,比如關於緩存的 cacheEnabled,關於級聯的 lazyLoadingEnabled 和 aggressiveLazy Loading,關於自動映射的 autoMappingBehavior 和 mapUnderscoreToCamelCase,關於執行器類型的 defaultExecutorType 等。
REF
http://c.biancheng.net/view/4324.html