MyBatis配置介紹
configuration結構
- properties(屬性)
- settings(設定)
- typeAliases(類型別名)
- typeHandlers(型別處理器)
- objectFactory(物件工廠)
- plugins(外掛)
- environments(環境配置)
- environment(環境變數)
- transactionManager(事務管理器)
- dataSource(資料來源)
- databaseIdProvider(資料庫廠商標識)
- mappers(對映器)
屬性properties
通過 properties 配置,我們可以將一些重要的配置屬性抽離
比如,dataSource 中的資料庫 url、使用者名稱和密碼,我們可以單獨以 datasource.properties 檔案來儲存,然後在 mybatis-config.xml 檔案中匯入使用。
在 resources 目錄下新建 datasource.properties 檔案,並填入以下內容:
url=jdbc:mysql://localhost:3306/imooc?useSSL=false
username=root
password=123456
然後在 mybatis-config.xml 檔案中通過 properties 配置來引入 datasource.properties 檔案:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入datasource.properties --> <properties resource="datasource.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!-- 佔位符動態替換配置 --> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> </configuration>
通過 properties 中的 resource 屬性引入 datasource.properties 後,我們就可以使用佔位符的方式去動態替換配置,如 ${url}
,表示從 datasource.properties 檔案中取出 url 項並填充在此處。
它們在目錄中的位置如下:
src/main/resources
├── datasource.properties
├── mybatis-config.xml
設定setting
當使用它們時,你只需要在mybatis-config.xml配置檔案中開啟相應的配置。
例如:我們開啟了下劃線轉駝峰的配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
別名typeAliases
MyBatis 在指定 Java 類時需要使用到類的全路徑,如 com.imooc.mybatis.model.Blog,typeAliases 可以為全路徑定義一個別名,這樣就能減少一定的重複工作。
例如,將 com.imooc.mybatis.model.Blog 的別名定義為 Blog:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="com.imooc.mybatis.model.Blog" alias="Blog"/>
</typeAliases>
</configuration>
MyBatis 還支援為一個包下所有類定義別名:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.imooc.mybatis.model"/>
</typeAliases>
</configuration>
這樣在 com.imooc.mybatis.model 包中的所有類都有了別名,每個類的別名都是其類的名稱首字母小寫,如 Author 類的別名為 author。
類處理器typeHandlers
物件工廠objectFactory
MyBatis 每次建立結果物件的新例項時,它都會使用一個物件工廠(ObjectFactory)來完成。MyBatis 預設的物件工廠僅僅只是例項化目標類,我們可以自定義一個物件工廠類來覆蓋預設的物件工廠。
配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<objectFactory type="org.mybatis.example.ExampleObjectFactory"/>
</configuration>
絕大多數情況下,這個操作都是極其危險的,改變了 MyBatis 預設的物件建立行為可能會帶來一定的相容錯誤,所以我們不做過多介紹,如果你確實需要它,可以查閱相關的資料。
外掛 plugins
環境配置 environment
環境配置是最為複雜的一項配置,MyBatis 提供了多環境配置機制,例如:開發環境和生產環境上的資料庫配置就大概率不一樣。
每個 environment 都有一個唯一的 id 欄位,且 environments 需要提供一個預設環境,如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/imooc?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
在每個 environment 下又有兩個子配置項,它們分別負責管理事務和資料來源
事務管理器 transactionManager
在 xml 檔案中對應 <transactionManager type="JDBC"/>
,其中 type 屬性對應了事務管理器的兩種型別,分別是JDBC和MANAGED。
- JDBC :直接使用了 JDBC 的提交和回滾機制。
- MANAGED:讓容器來管理事務的整個生命週期,例如 spring 容器。
如果你使用 spring 作為容器,那麼 transactionManager 會被自動配置且可用。
資料來源dataSource
在 xml 檔案中對應<dataSource type="POOLED">
,其中 type 屬性代表了資料來源的型別,可選的有三種類型,如下:
- UNPOOLED:非池化資料來源,每次使用時開啟,結束後關閉,不推薦。
- POOLED:池化資料來源,連線池管理連線,推薦。
- JNDI:在 EJB 這類容器中使用,幾乎不用。
資料庫廠商表識 databaseIdProvider
對映器 mappers
通過 mappers 配置,我們可以指定所對應 SQL 對映檔案,這樣 MyBatis 才能找到另一部分的 SQL 配置檔案。
mappers 可以包含多個 mapper,mapper 的載入共有 4
種方式。
相對類路徑
通過 resource 屬性指定 mapper .xml 檔案所對應的類路徑。
<mappers>
<mapper resource="com/imooc/mybatis/mapper/UserMapper.xml"/>
</mappers>
URL路徑
通過url屬性指定mapper.xml檔案所對應的檔案路徑
<mappers>
<mapper url="file:///mapper/UserMapper.xml"/>
</mappers>
類路徑
通過 class 屬性指定 mapper 類所對應的類路徑。
<mappers>
<mapper class="com.imooc.mybatis.mapper.UserMapper"/>
</mappers>
包路徑
通過制定包路徑,將包中的所有介面類自動掃描為 mapper。
<mappers>
<package name="com.imooc.mybatis.mapper"/>
</mappers>
小結
- MyBatis 的配置是比較多的,本小節列舉了一些
常用且重要
的配置,如果你還不滿足,可以閱讀這裡的官方配置文件。 - MyBatis 的另一部分 SQL 配置雖然分散在了包中,但通過 mappers 這個中間橋樑,二者又緊密的結合在一起了。
- 在真實的開發中,會有專門的類庫來提供這些配置,但你需要了解它們,以便在需要時迅速作出反應。