MyBatis中settings屬性配置詳解
阿新 • • 發佈:2021-12-22
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