settings是MyBatis中最復雜的配置朦蕴,它能影響MyBatis底層的運行篮条,大部分情況下使用默認值,只需要修改一些常用的規(guī)則即可吩抓。常用規(guī)則有自動映射涉茧、駝峰命名映射、級聯(lián)規(guī)則琴拧、是否啟動緩存降瞳、執(zhí)行器類型等嘱支。
所有配置可參考MyBatis官方文檔:http://www.mybatis.org/mybatis-3/configuration.html#settings
本文列出重要的幾個配置項及意義蚓胸,并挑幾個常用配置加以說明:
<!--設置 -->
<settings>
<!--緩存配置的全局開關:如果這里設置成false,那么即便在映射器中配置開啟也無濟于事 -->
<setting name="cacheEnabled" value="true" />
<!--延時加載的全局開關 -->
<setting name="lazyLoadingEnabled" value="false" />
<!-- 是否允許單一語句返回多結果集 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 使用列標簽代替列名除师,需要兼容驅動 -->
<setting name="useColumnLabel" value="true" />
<!-- 允許JDBC自動生成主鍵沛膳,需要驅動兼容。如果設置為true汛聚,則這個設置強制使用自動生成主鍵锹安,盡管一些驅動不能兼容但仍能正常工作 -->
<setting name="useGeneratedKeys" value="false" />
<!-- 指定MyBatis該如何自動映射列到字段或屬性:NONE表示取消自動映射;PARTIAL表示只會自動映射倚舀,沒有定義嵌套結果集和映射結果集叹哭;FULL會自動映射任意復雜的結果集,無論是否嵌套 -->
<setting name="autoMappingBehavior" value="PARTIAL" />
<!-- 配置默認的執(zhí)行器:SIMPLE是普通的執(zhí)行器痕貌;REUSE會重用預處理語句抢呆;BATCH會重用語句并執(zhí)行批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!--設置超時時間:它決定驅動等待數(shù)據(jù)庫響應的秒數(shù),任何正整數(shù)-->
<setting name="defaultStatementTimeout" value="25"/>
<!--設置數(shù)據(jù)庫驅動程序默認返回的條數(shù)限制九妈,此參數(shù)可以重新設置,任何正整數(shù) -->
<setting name="defaultFetchSize" value="100" />
<!-- 允許在嵌套語句中使用分頁(RowBounds) -->
<setting name="safeRowBoundsEnabled" value="false" />
<!-- 是否開啟自動駝峰命名規(guī)則,即從a_example到aExample的映射 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
<!-- 本地緩存機制,防止循環(huán)引用和加速重復嵌套循環(huán) -->
<setting name="localCacheScope" value="SESSION" />
<!-- 當沒有為參數(shù)提供特定JDBC類型時刷钢,為空值指定JDBC類型。某些驅動需要指定列的JDBC類型倦畅,多數(shù)情況直接用一般類型即可蹂季,如NULL/VARCHAR/OTHER -->
<setting name="jdbcTypeForNull" value="OTHER" />
<!-- 指定觸發(fā)延遲加載的方法,如equals/clone/hashCode/toString -->
<setting name="lazyLoadTriggerMethods" value="equals" />
</settings>
我目前使用的最有用的配置就是mapUnderscoreToCamelCase這個落追,我的數(shù)據(jù)庫字段的命名格式是test_example這種盈滴,對應的pojo對象中屬性的命名是駝峰式,如果這個屬性用默認值false轿钠,就會發(fā)現(xiàn)需要在sql語句中進行轉換巢钓,如果我的數(shù)據(jù)庫表中有三個字段分別是user_id,user_name谣膳,user_age竿报,那我查詢所有信息的時候不能這樣??
SELECT * FROM user
而是要將每個字段都轉換成駝峰式,像這樣??
SELECT user_id as userId,user_name as userName,user_age as userAge FROM user
想象一下继谚,如果我的表中有十幾個字段烈菌,那我查詢所的時候就需要一個個進行轉換,太麻煩了,但是如果把這個配置設置成true芽世,就完全不用這么麻煩了挚赊。
其他的目前還沒遇到,等遇到了再補充吧济瓢,以上就是settings配置荠割。