settings是MyBatis中最復雜的配置,它能影響MyBatis底層的運行,大部分情況下使用默認值,只需要修改一些常用的規則即可。常用規則有自動映射、駝峰命名映射、級聯規則、是否啟動緩存、執行器類型等。
所有配置可參考MyBatis官方文檔:http://www.mybatis.org/mybatis-3/configuration.html#settings
本文列出重要的幾個配置項及意義,並挑幾個常用配置加以說明:
1 <!--設置 --> 2 <settings> 3 <!--緩存配置的全局開關:如果這里設置成false,那么即便在映射器中配置開啟也無濟於事 --> 4 <setting name="cacheEnabled" value="true" /> 5 <!--延時加載的全局開關 --> 6 <setting name="lazyLoadingEnabled" value="false" /> 7 <!-- 是否允許單一語句返回多結果集 --> 8 <setting name="multipleResultSetsEnabled" value="true" /> 9 <!-- 使用列標簽代替列名,需要兼容驅動 --> 10 <setting name="useColumnLabel" value="true" /> 11 <!-- 允許JDBC自動生成主鍵,需要驅動兼容。如果設置為true,則這個設置強制使用自動生成主鍵,盡管一些驅動不能兼容但仍能正常工作 --> 12 <setting name="useGeneratedKeys" value="false" /> 13 <!-- 指定MyBatis該如何自動映射列到字段或屬性:NONE表示取消自動映射;PARTIAL表示只會自動映射,沒有定義嵌套結果集和映射結果集;FULL會自動映射任意復雜的結果集,無論是否嵌套 --> 14 <setting name="autoMappingBehavior" value="PARTIAL" /> 15 <!-- 配置默認的執行器:SIMPLE是普通的執行器;REUSE會重用預處理語句;BATCH會重用語句並執行批量更新 --> 16 <setting name="defaultExecutorType" value="SIMPLE" /> 17 <!--設置超時時間:它決定驅動等待數據庫響應的秒數,任何正整數--> 18 <setting name="defaultStatementTimeout" value="25"/> 19 <!--設置數據庫驅動程序默認返回的條數限制,此參數可以重新設置,任何正整數 --> 20 <setting name="defaultFetchSize" value="100" /> 21 <!-- 允許在嵌套語句中使用分頁(RowBounds) --> 22 <setting name="safeRowBoundsEnabled" value="false" /> 23 <!-- 是否開啟自動駝峰命名規則,即從a_example到aExample的映射 --> 24 <setting name="mapUnderscoreToCamelCase" value="true" /> 25 <!-- 本地緩存機制,防止循環引用和加速重復嵌套循環 --> 26 <setting name="localCacheScope" value="SESSION" /> 27 <!-- 當沒有為參數提供特定JDBC類型時,為空值指定JDBC類型。某些驅動需要指定列的JDBC類型,多數情況直接用一般類型即可,如NULL/VARCHAR/OTHER --> 28 <setting name="jdbcTypeForNull" value="OTHER" /> 29 <!-- 指定觸發延遲加載的方法,如equals/clone/hashCode/toString --> 30 <setting name="lazyLoadTriggerMethods" value="equals" /> 31 </settings>
我目前使用的最有用的配置就是mapUnderscoreToCamelCase這個,我的數據庫字段的命名格式是test_example這種,對應的pojo對象中屬性的命名是駝峰式,如果這個屬性用默認值false,就會發現需要在sql語句中進行轉換,如果我的數據庫表中有三個字段分別是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配置。