下圖展現了mybatis-config.xml的所有配置元素java
properties是一個配置屬性的元素,讓咱們能在配置文件的上下文中使用它,MyBatis提供3種配置方式。mysql
property子元素。sql
<property name="driver" value="com.mysql.jdbc.Driver"/>
properties配置文件。數據庫
通常狀況下,咱們會使用一個單獨的properties配置文件來配置屬性值,以方便咱們在多個配置文件中重複使用它們,也方便往後維護和隨時修改。咱們能夠經過${key}的形式,取出在配置文件中配置的值。apache
<configuration> <!-- 引入配置文件 --> <properties resource="datasource.properties"/> <environments default="dev"> <environment id="dev"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 使用配置文件中的屬性 --> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> </dataSource> </environment> </environments> </configuration>
SqlSessionFactoryBuilder使用Properties文件構建。數組
出於安全考慮,properties配置文件中的帳號密碼等元素多是加密的,這個時候就須要對加密的元素進行處理。緩存
public static void func() throws Exception { Properties properties = new Properties(); properties.load(Resources.getResourceAsStream("datasource.properties")); // 對原帳號密碼解密 properties.setProperty("username", decode(properties.getProperty("username"))); properties.setProperty("password", decode(properties.getProperty("password"))); InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); // SqlSessionFactoryBuilder可使用一個InputStream和一個Properties構建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is, properties); }
settings(設置)在MyBatis中是最複雜的配置,它會改變 MyBatis運行時的行爲。安全
設置參數 | 描述 | 有效值 | 默認值 |
---|---|---|---|
cacheEnabled | 該配置影響全部映射器中配置的緩存全局開關 | true、 false | true |
lazyLoadingEnabled | 延遲加載的全局開關,當它開啓時,全部關聯對象都會延遲加載。特定關聯關係中可經過設置fetchType屬性來覆蓋該項的開關狀態 | true、false | false |
aggressiveLazyLoading | 當啓用時,對任意延遲屬性的調用會使帶有延遲加載屬性的對象完整加載;反之,每種屬性將會按需加載 | true、 false | true |
multipleresultSetsEnabled | 是否容許單一語句返回多結果集(須要兼容驅動) | true、 false | true |
useColumnLabel | 使用列標籤代替列名。不一樣的驅動在這方面會有不一樣的表現,具體可參考相關驅動文檔或經過測試這兩種不一樣的模式來觀察所用驅動的結果 | true、 false | true |
useGeneratedKeys | 容許JDBC支持自動生成主鍵,須要驅動兼容。若是設置爲true,則這個設置強制使用自動生成主鍵 | true、fase | false |
autoMappingBehavior | 指定 MyBatis應如何自動映射列到字段或屬性:NONE表示取消自動映射、PARTIAL只會自動映射沒有定義嵌套結果集映射的結果集、FULL會自動映射任意複雜的結果集 | NONE、 PARTIAL、FULL | PARTIAL |
defaultExecutorType | 配置默認的執行器:SIMPLE是普通的執行器、REUSE執行器會重用預處理語句(prepared statements)、BATCH執行器將重用語句並執行批量更新 | SIMPLE、 REUSE、SIMPLE | SIMPLE |
defaultStatementTimeout | 設置超時時間,它決定驅動等待數據庫響應的秒數。當沒有設置的時候它取的就是驅動默認的時間 | any positive integer | Not set(null) |
別名(typeAliases)是一個指代的名稱。由於咱們遇到的類全限定名過長,因此咱們但願用一個簡短的名稱去指代它,而這個名稱能夠在MyBatis上下文中使用,在 MyBatis中別名是不分大小寫的。一個 typeAliases的實例是在解析配置文件時生成的,而後長期保存在 Configuration對象中,這樣就沒有必要運行的時候再次生成它的實例了。mybatis
系統定義的別名app
經過org.apache.ibatis.type.TypeAliasRegistry能夠查看全部系統定義的別名,主要是基本數據類型、字符串、基本數據類型數組、日期、容器類。
經過XML自定義別名
在mybatis-config.xml中經過<typeAliases>
元素能夠自定義別名。
<typeAliases> <typeAlias type="com.zl.domain.UserDomain" alias="user"/> </typeAliases>
經過註解的方式自定義別名
在mybatis-config.xml中添加package掃描包
<typeAliases> <package name="com.zl.domain"/> </typeAliases>
@Alias("user") public class UserDomain { }
當配合上面的配置,MyBatis就會自動掃描包,將掃描到的類裝載到上下文中。若是配置了包掃描的路徑,而沒有註解@Alias的類也會被MyBatis裝載,MyBatis會自動把類名的第一個字母變爲小寫,做爲MyBatis的別名。
typeHandler爲類型處理器。MyBatis在預處理語句(PreparedStatement)中設置一個參數或者從結果集(ResultSet)中取出一個值時,都會用註冊了的typeHandler進行處理。typeHandler經常使用的配置爲Java類型(javaType)、JDBC類型(jdbcType)。typeHandler的做用就是將參數從javaType轉化爲 jdbcType,或者從數據庫取出結果時把jdbcType轉化爲javaType。
具體詳見:Mybatis類型轉換介紹 TypeHandler
當MyBatis在構建一個結果返回的時候,都會使用ObjectFactory(對象工廠)去構建POJO,咱們能夠定製本身的對象工廠。MyBatis中默認的ObjectFactory是由DefaultObjectFactory來提供服務的。
<environments default="dev"> <environment id="dev"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> </dataSource> </environment> </environments>