settings是MyBatis中極為重要的調整設置,會改變Mybatis的運行時行為。
一個完整的settings元素的示例如下:
<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> |
下表描述了設置中各項的意圖、默認值等。
設置參數 |
描述 |
有效值 |
默認值 |
cacheEnabled |
全局地開啟或關閉配置文件中的所有映射器已經配置的任何緩存。 |
true | false |
true |
lazyLoadingEnabled |
延遲加載的全局開關。當開啟時,所有關聯對象都會延遲加載。特定關聯關系中可通過設置fetchType屬性來覆蓋該項的開關狀態。 |
true | false |
false |
aggressiveLazyLoading |
當開啟時,任何方法調用都會加載該對象的所有屬性。否則,每個屬性會按需加載(參考lazyLoadTriggerMethods) |
true | false |
false(true in <= 3.4.1) |
multipleResultSetsEnabled |
是否允許單一語句返回多結果集(需要兼容驅動) |
true | false |
true |
useColumnLabel |
使用列標簽代替列名。不同的驅動在這方面會有不同的表現,具體可參考相關驅動文檔或通過測試這兩種不同的模式來觀察所用驅動的結果。 |
true | false |
true |
useGeneratedKeys |
允許JDBC支持自動生成主鍵,需要驅動兼容。如果設置為true則這個設置強制使用自動生成主鍵,盡管一些驅動不能兼容但仍可正常工作(比如Derby) |
true | false |
false |
autoMappingBehavior |
指定MyBatis應如何自動映射列到字段或屬性。NONE表示取消自動映射;PARTIAL只會自動映射沒有定義嵌套結果集映射的結果集。FULL會自動映射任意復雜的結果集(無論是否嵌套) |
NONE,PARTIAL,FULL |
PARTIAL |
autoMappingUnknownColumnBehavior |
指定發現自動映射目標未知列(或者未知屬性類型)的行為。 ·NONE:不做任何反應 ·WARNING:輸出提醒日志 (‘org.apache.ibatis.session.AutoMappingUnknownColumnBehavior’的日志等級必須設置為WARN) ·FAILING:映射失敗(拋出SqlSessionException) |
NONE,WARNING,FAILING |
NONE |
defaultExecutorType |
配置默認的執行器。SIMPLE就是普通的執行器;REUSE執行器會重用預處理語句(prepared statements);BATCH執行器將重用語句並執行批量更新。 |
SIMPLE,REUSE,BATCH |
SIMPLE |
defaultStatementTimeout |
設置超時時間,它決定驅動等待數據庫響應的秒數 |
任意正整數 |
Not Set(null) |
defaultFetchSize |
為驅動的結果集獲取數量(fetchSize)設置一個提示值。此參數只可以在查詢設置中被覆蓋。 |
任意正整數 |
Not Set(null) |
safeRowBoundsEnabled |
允許在嵌套語句中使用分頁(RowBounds)。如果允許使用則設置為false。 |
true | false |
False |
safeResultHandlerEnabled |
允許在嵌套語句中使用分頁(ResultHandler)。如果允許使用則設置為false。 |
true | false |
True |
mapUnderscoreToCamelCase |
是否開啟自動駝峰命名規則(camel case)映射,既從經典數據庫列名A_COLUMN到經典java屬性名aColumn的類似映射。 |
true | false |
False |
localCacheScope |
MyBatis利用本地緩存機制(Local Cache)防止循環引用(circular references)和加速重復嵌套查詢。默認值為SESSION,這種情況下會緩存一個會話中執行的所有查詢。若設置值為STATEMENT,本地會話僅用在語句執行上,對相同SqlSession的不同調用將不會共享數據。 |
SESSION | STATEMENT |
SESSION |
jdbcTypeForNull |
當沒有為參數提供特定的JDBC類型時,為空值指定JDBC類型。某些驅動需要指定列的JDBC類型,多數情況直接用一般類型即可,比如NULL,VARCHAR或OTHER。 |
jdbc Type 常量,大多都為:NULL,VARCHAR and OTHER |
OTHER |
lazyLoadTriggerMethods |
指定哪個對象的方法觸發一次延遲加載。 |
用逗號分隔的方法列表 |
equals,clone,hashCode,toString |
defaultScriptingLanguage |
指定動態SQL生成的默認語言。 |
一個類型別名或完全限定類名 |
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver |
defaultEnumTypeHandler |
指定Enum使用的默認TypeHandler.(從3.4.5開始) |
一個類型別名或完全限定類名 |
org.apache.ibatis.type.EnumTypeHandler |
callSettersOnNulls |
指定當結果集中值為null的時候是否調用映射對象的setter(map對象時為put)方法,這對於有Map.keySet()依賴或null值初始化的時候是有用的。注意基本類型(int,boolean等)是不能設置成null的。 |
true | false |
false |
returnInstanceForEmptyRow |
當返回行的所有列都是空時,MyBatis默認返回null。當開啟這個設置時,MyBatis會返回一個空實例。請注意,它也適用於嵌套的結果集(i.e.collection and association)。(從3.4.2開始) |
true | false |
false |
logPrefix |
指定MyBatis增加到日志名稱的前綴。 |
任何字符串 |
Not set |
logImpl |
指定MyBatis所用日志的具體實現,未指定時將自動查找。 |
SLF4J | LOG4J | LOG4J2 |JDK_LOGGING |COMMONS_LOGGING | STDOUT_LOGGING | N0_LOGGING |
Not set |
proxyFactory |
指定MyBatis創建具有延遲加載能力的對象所用到的代理工具。 |
CGLIB | JAVASSIST |
JAVASSIST(MyBatis 3.3 or above) |
vfsImpl |
指定VFS的實現 |
自定義VFS的實現的類全限定名,以逗號分隔 |
Not set |
useActualParamName |
允許使用方法簽名中的名稱作為語句參數名稱。為了使用該特性,工程必須采用java 8編譯,並加上-parameters選項(從3.4.1開始) |
true | false |
true |
configurationFactory |
指定一個提供Configuration實例的類。這個被返回的Configuration實例用來加載被反序列化對象的懶加載屬性值。這個類必須包含一個簽名方法static Configuration getConfiguration()。(從3.2.3版本開始) |
類型別名或者全類名 |
Not set |