1. 程式人生 > 實用技巧 >MyBatis配置介紹

MyBatis配置介紹

configuration結構

- properties(屬性)
- settings(設定)
- typeAliases(類型別名)
- typeHandlers(型別處理器)
- objectFactory(物件工廠)
- plugins(外掛)
- environments(環境配置)
    - environment(環境變數)
        - transactionManager(事務管理器)
        - dataSource(資料來源)
- databaseIdProvider(資料庫廠商標識)
- mappers(對映器)

屬性properties

通過 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

Untitled

當使用它們時,你只需要在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

typeHandler

物件工廠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 這個中間橋樑,二者又緊密的結合在一起了。
  • 在真實的開發中,會有專門的類庫來提供這些配置,但你需要了解它們,以便在需要時迅速作出反應。