1. 程式人生 > 實用技巧 >Springboot中自定義Mybatis的配置規則(如開啟駝峰對映等)

Springboot中自定義Mybatis的配置規則(如開啟駝峰對映等)

什麼是自定義Mybatis的配置規則?

答:即原來在mybatis配置檔案中中我們配置到<settings>標籤中的內容,如下第6-10行內容:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <settings
> 7 <setting name="lazyLoadingEnabled" value="true"/> 8 <setting name="aggressiveLazyLoading" value="false"/> 9 <setting name="logImpl" value="LOG4J"/> 10 </settings>
11 <environments default="development"> 12 <environment id="development"
> 13 <transactionManager type="JDBC"/> 14 <dataSource type="POOLED"> 15 <property name="driver" value="com.mysql.jdbc.Driver"/> 16 <property name="url" 17 value="jdbc:mysql://localhost:3306/ssm?useSSL=true&amp;serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf8"
/> 18 <property name="username" value="root"/> 19 <property name="password" value="123456"/> 20 </dataSource> 21 </environment> 22 </environments> 23 <mappers> 24 <!--<mapper resource="com/xj/mapper/UserMapper.xml"/>--> 25 <mapper class="com.xj.mapper.UserMapper"/> 26 <mapper class="com.xj.mapper.AccountMapper"/> 27 28 </mappers> 29 </configuration>

在springboot我們不用編寫xml配置檔案,那麼我們該怎麼來配置這些設定呢?

答:編寫一個配置類,然後通過@Bean註解給容器中新增一個ConfigurationCustomizer型別的元件即可。如下例子所示:

@Configuration
public class MybatisConfig {

    @Bean
    public ConfigurationCustomizer configurationCustomizer(){
        return new ConfigurationCustomizer() {
            @Override
            public void customize(org.apache.ibatis.session.Configuration configuration) {
                configuration.setLazyLoadingEnabled(true);
                configuration.setMapUnderscoreToCamelCase(true);
                configuration.setLogImpl(Log4jImpl.class);
            }
        };
    }
}

Mybatis中可以配置的設定如下所示:

設定名描述有效值預設值
cacheEnabled 全域性性地開啟或關閉所有對映器配置檔案中已配置的任何快取。 true | false true
lazyLoadingEnabled 延遲載入的全域性開關。當開啟時,所有關聯物件都會延遲載入。 特定關聯關係中可通過設定fetchType屬性來覆蓋該項的開關狀態。 true | false false
aggressiveLazyLoading 開啟時,任一方法的呼叫都會載入該物件的所有延遲載入屬性。 否則,每個延遲載入屬性會按需載入(參考lazyLoadTriggerMethods)。 true | false false (在 3.4.1 及之前的版本中預設為 true)
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 執行器會重用預處理語句(PreparedStatement); BATCH 執行器不僅重用語句還會執行批量更新。 SIMPLE REUSE BATCH SIMPLE
defaultStatementTimeout 設定超時時間,它決定資料庫驅動等待資料庫響應的秒數。 任意正整數 未設定 (null)
defaultFetchSize 為驅動的結果集獲取數量(fetchSize)設定一個建議值。此引數只可以在查詢設定中被覆蓋。 任意正整數 未設定 (null)
defaultResultSetType 指定語句預設的滾動策略。(新增於 3.5.2) FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同於未設定) 未設定 (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)防止迴圈引用和加速重複的巢狀查詢。 預設值為 SESSION,會快取一個會話中執行的所有查詢。 若設定值為 STATEMENT,本地快取將僅用於執行語句,對相同 SqlSession 的不同查詢將不會進行快取。 SESSION | STATEMENT SESSION
jdbcTypeForNull 當沒有為引數指定特定的 JDBC 型別時,空值的預設 JDBC 型別。 某些資料庫驅動需要指定列的 JDBC 型別,多數情況直接用一般型別即可,比如 NULL、VARCHAR 或 OTHER。 JdbcType 常量,常用值:NULL、VARCHAR 或 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會返回一個空例項。 請注意,它也適用於巢狀的結果集(如集合或關聯)。(新增於 3.4.2) true | false false
logPrefix 指定 MyBatis 增加到日誌名稱的字首。 任何字串 未設定
logImpl 指定 MyBatis 所用日誌的具體實現,未指定時將自動查詢。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未設定
proxyFactory 指定 Mybatis 建立可延遲載入物件所用到的代理工具。 CGLIB | JAVASSIST JAVASSIST (MyBatis 3.3 以上)
vfsImpl 指定 VFS 的實現 自定義 VFS 的實現的類全限定名,以逗號分隔。 未設定
useActualParamName 允許使用方法簽名中的名稱作為語句引數名稱。 為了使用該特性,你的專案必須採用 Java 8 編譯,並且加上-parameters選項。(新增於 3.4.1) true | false true
configurationFactory 指定一個提供Configuration例項的類。 這個被返回的 Configuration 例項用來載入被反序列化物件的延遲載入屬性值。 這個類必須包含一個簽名為static Configuration getConfiguration()的方法。(新增於 3.2.3) 一個類型別名或完全限定類名。 未設定
shrinkWhitespacesInSql Removes extra whitespace characters from the SQL. Note that this also affects literal strings in SQL. (Since 3.5.5) true | false false