最全MyBatis核心配置文件總結,能夠做爲工具先收藏了

前言

今天這咱主要介紹一下MyBatis的全局配置文件的使用java

configuration

mybatis-config.xml文件的頭部格式咱們就不說了,直接從屬性開始介紹,configuration爲最頂層節點,其他全部的屬性都必須嵌套在configuration內,MyBatis配置文件的頂層節點以下:sql

<properties></properties><!-- 屬性 -->
<settings></settings>    <!-- 設置-->
<typeAliases></typeAliases><!-- 配置別名 -->
<typeHandlers></typeHandlers><!-- 類型處理器 -->
<objectFactory></objectFactory><!-- 對象工廠 -->
<plugins></plugins><!-- 插件 -->
<environments default=""><!-- 環境配置-->
   <environment id=""><!-- 環境變量 -->
      <transactionManager></transactionManager><!-- 事務管理器 -->
      <dataSource></dataSource><!-- 數據源 -->
   </environment>
</environments>
<databaseIdProvider></databaseIdProvider><!-- 數據庫廠商標識 -->
<mappers></mappers><!-- 映射器 -->

能夠看到configuration內的所有頂層節點只有9個,下面咱們就一個個來分析一下數據庫

properties

下面是一個相對完整的屬性配置apache

<!-- 配置resource-->
<properties resource="xxx/xxx.properties"><!-- 屬性 -->
        <property name="jdbc.driver" value="db.properties"/>
    </properties>
<!-- 配置url-->
<properties url="http://xxxx"><!-- 屬性 -->
        <property name="jdbc.driver" value="db.properties"/>
    </properties>

上面我特地分開寫,就是怕引發你們的誤解,由於resource和url只容許存在一個,不能同時配置兩個屬性,能夠看到源碼中的解析過程:同時配置了resource和url會拋出異常。服務器

配置了properties屬性以後,在xml其餘配置文件中能夠直接經過${xxx}來讀取。mybatis

properties配置有三種方式,resource或者url指定,直接配置在子節點properties中,另外一種就是上一篇提到的,直接代碼中去其餘地方讀取properties文件,而後傳入build方法。mvc

那麼這三種方式既然都能配置,假如屬性配置重複了,優先級是怎麼樣的呢?app

properties優先級

properties配置的屬性若是重複,優先級以下:maven

  • 一、第一優先:在代碼中直接經過properties傳入build方法。
  • 二、第二優先:經過resource或者url讀取到的properties文件中屬性。
  • 三、第三優先:直接在properties內的子標籤property內定義的屬性。

在實際開發中,建議是隻使用一種,使用多種方式混合的話會給後期維護形成困難,並且不一樣類型的配置屬性混合時可讀性也很差。編輯器

settings

settings是MyBatis中最複雜,也是最重要的內容之一。固然這裏說的複雜並非說配置方式複雜,而是settings能配置的東西很是多,一些很核心的功能都是經過settings標籤配置的。下面是一個完整的屬性配置示例:

<settings><!-- 設置-->
        <setting name="cacheEnabled" value="false"/>
        <setting name="lazyLoadingEnabled" value="false"/>
        <setting name="aggressiveLazyLoading" value="false"/>
        <setting name="multipleResultSetsEnabled" value="false"/>
        <setting name="useColumnLabel" value="false"/>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="autoMappingBehavior" value="NONE"/>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="defaultStatementTimeout" value="100"/>
        <setting name="safeRowBoundsEnabled" value="false"/>
        <setting name="mapUnderscoreToCamelCase" value="false"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="jdbcTypeForNull" value="VARCHAR"/>
        <setting name="lazyLoadTriggerMethods" value="equals"/>
        <setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver"/>
        <setting name="callSettersOnNulls" value="false"/>
        <setting name="logPrefix" value="LONELY_WOLF_"/>
        <setting name="logImpl" value="SLF4J"/>
        <setting name="proxyFactory" value="JAVASSIST"/>
    </settings>

全部的可設置值列舉以下(這些屬性有個映像就能夠了,不須要去記,經常使用的多用幾回天然就記住了,不經常使用的須要的時候再查一下資料就能夠了,因此建議你們能夠收藏以後方便查詢):

typeAliases

類型別名是爲 Java 類型設置一個短的名字。它只和 XML 配置有關,存在的意義僅在於用來減小類徹底限定名的冗餘。

直接指定類名

例如:

<typeAlias alias="UserMapper" type="com.lonelyWolf.mybatis.mapper.UserMapper"/>

這樣配置的話在MyBatis的xml文件中能夠直接使用UserMapper代替其類的全限定名。

只指定包名

也能夠指定一個包名,MyBatis會在包名下面搜索須要的 Java Bean,好比:

<package name="com.lonelyWolf.mybatis.mapper"/>

這麼配置的話每個在指定包名中的Java類,若是沒有使用註解指定名稱,則會默認使用Bean的首字母小寫的非限定類名來做爲它的別名,若是有註解,則優先使用註解指定的別名。如:

@Alias("lonely_wolf")
public class LonelyWolf{
}

這裏由於註解指定了別名,因此會以註解爲準,若是沒有註解,則默認使用lonelyWolf做爲別名。

系統默認提供的別名

實際開發中,有不少返回類型是數據基本類型或者String,Map,List等很是常見的類型,這些類型MyBatis已經爲咱們提供好了別名,咱們就不須要另外再定義了。如下就時MyBatis中默認提供的別名:PS:這些別名的字母都是不區分大小寫的,由於MyBatis在註冊別名的時候會所有轉爲小寫字母存儲

typeHandlers

typeHandlers主要是用來實現Java對象和數據庫字段類型額轉換關係。不管是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,仍是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。配置方式以下:

 <typeHandlers>
   <!-- 自定義typeHandlers全限定類名 -->
        <typeHandler handler="xxx.xxx.xxx"></typeHandler>
        <!-- 獲取指定包名下的typeHandlers -->
        <package name="xxx.xxx"/>
    </typeHandlers>

MyBatis默認提供的Java Bean和數據庫字段類型映射關係以下:

自定義typeHandlers

上面是MyBatis提供的默認映射類型,能夠處理大部分需求,若是咱們須要有不一樣的需求,則能夠本身定義類型,具體如何定義,在後面的文章會單獨分析,在這裏不展開,感興趣的能夠關注我,留意後續文章。

objectFactory

MyBatis 每次建立結果對象的新實例時,它都會使用一個對象工廠(ObjectFactory)實例來完成。默認的對象工廠須要作的僅僅是實例化目標類,要麼經過默認構造方法,要麼在參數映射存在的時候經過參數構造方法來實例化。若是想覆蓋對象工廠的默認行爲,則 能夠經過建立本身的對象工廠來實現

plugins

MyBatis 容許你在已映射語句執行過程當中的某一點進行攔截調用。這裏咱們不詳細討論,後期會有單獨文章介紹MyBatis插件

environments

MyBatis 能夠配置成適應多種環境,這種機制有助於將 SQL 映射應用於多種數據庫之中,例如:開發、測試和生產環境須要有不一樣的配置;或者共享相同 Schema 的多個生產數據庫, 想使用相同的 SQL 映射。許多相似的用例。注意:儘管能夠配置多個環境,每一個SqlSessionFactory實例只能選擇其一。因此,若是想鏈接兩個數據庫,就須要建立兩個SqlSessionFactory實例,每一個數據庫對應一個。配置示例以下:

<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

environment配置關鍵點:

  • 默認的環境 ID(好比:default=」development」)
  • 每一個 environment 元素定義的環境 ID(好比:id=」development」)。
  • 事務管理器的配置(好比:type=」JDBC」)。
  • 數據源的配置(好比:type=」POOLED」)。

事務管理器

在 MyBatis 中有兩種類型的事務管理器(也就是 type=」JDBC"或者"MANAGED」):

  • JDBC:這個配置就是直接使用了 JDBC 的提交和回滾設置,它依賴於從數據源獲得的鏈接來管理事務範圍。
  • MANAGED:這個配置幾乎沒作什麼。它歷來不提交或回滾一個鏈接,而是讓容器來管理事務的整個生命週期(好比J2EE應用容器上下文)。默認狀況下它會關閉鏈接,然而一些容器並不但願這樣,所以須要將 closeConnection 屬性設置爲 false 來阻止它默認的關閉行爲。如:注意:若是單獨使用MyBatis而沒有集成能管理事務的容器,那麼配置成MANAGED就會等同於沒有事務,因此通常單獨使用MyBatis時,應配置爲JDBC。

數據源

dataSource元素使用標準的 JDBC 數據源接口來配置JDBC鏈接對象的資源。有三種內建的數據源類型(也就是 type=」[UNPOOLED|POOLED|JNDI]」)。

UNPOOLED

非鏈接池數據源。UNPOOLED 類型的數據源僅僅須要配置如下 5 種屬性:

  • driver – 這是 JDBC 驅動的 Java 類的徹底限定名(並非JDBC驅動中可能包含的數據源類)
  • url – 這是數據庫的 JDBC URL 地址
  • username – 登陸數據庫的用戶名
  • password – 登陸數據庫的密碼
  • defaultTransactionIsolationLevel – 默認的鏈接事務隔離級別

POOLED

鏈接池數據源。除了上述提到UNPOOLED下的屬性外,會有更多屬性用來配置 POOLED 的數據源:

  • poolMaximumActiveConnections – 在任意時間能夠存在的活動(也就是正在使用)鏈接數量,默認值:10
  • poolMaximumIdleConnections – 任意時間可能存在的空閒鏈接數
  • poolMaximumCheckoutTime – 在被強制返回以前,池中鏈接被檢出(checked out)時間,默認值:20000 毫秒(即 20 秒)
  • poolTimeToWait – 這是一個底層設置,若是獲取鏈接花費的至關長的時間,它會給鏈接池打印狀態日誌並從新嘗試獲取一個鏈接(避免在誤配置的狀況下一直安靜的失敗),默認值:20000 毫秒(即 20 秒)
  • poolPingQuery – 發送到數據庫的偵測查詢,用來檢驗鏈接是否處在正常工做秩序中並準備接受請求。默認是「NO PING QUERY SET」,這會致使多數數據庫驅動失敗時帶有一個恰當的錯誤消息。
  • poolPingEnabled – 是否啓用偵測查詢。若開啓,也必須使用一個可執行的 SQL 語句設置 poolPingQuery 屬性(最好是一個很是快的 SQL),默認值:false
  • poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的使用頻度。這能夠被設置成匹配具體的數據庫鏈接超時時間,來避免沒必要要的偵測,默認值:0(即全部鏈接每一時刻都被偵測 — 固然僅當 poolPingEnabled 爲 true 時適用)

JNDI

這個數據源的實現是爲了能在如 EJB 或應用服務器這類容器中使用,容器能夠集中或在外部配置數據源,而後放置一個 JNDI 上下文的引用。這種數據源配置只須要兩個屬性:

  • initial_context – 這個屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))。這是個可選屬性,若是忽略,那麼 data_source 屬性將會直接從 InitialContext 中尋找。
  • data_source – 這是引用數據源實例位置的上下文的路徑。提供了 initial_context 配置時會在其返回的上下文中進行查找,沒有提供時則直接在 InitialContext 中查找。

自定義數據源

有些業務場景可能須要本身自定義數據源,MyBatis也是支持的。自定義數據源必需要實現DataSourceFactory接口。而後採用以下配置:

 <dataSource type="自定義數據源全限定類名"></dataSource>

databaseIdProvider

MyBatis 能夠根據不一樣的數據庫廠商執行不一樣的語句,這種多廠商的支持是基於映射語句中的 databaseId 屬性。MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數據庫 databaseId 屬性的全部語句。若是同時找到帶有databaseId 和不帶 databaseId 的相 同語句,則後者會被捨棄。爲支持多廠商特性只要像下面這樣在 mybatis-config.xml 文件中加入 databaseIdProvider 便可:

<databaseIdProvider type="DB_VENDOR" />

mappers

這個就是用來配置sql映射語句的xml文件了。mappers文件共有4種配置方式:

一、直接配置xml映射文件全限定名

<mappers>
        <mapper resource="com/lonelyWolf/mybatis/mapping/UserMapper.xml"/>
    </mappers>

二、經過url配置本地或者遠程映射文件路徑

<mappers>
        <mapper url="file://xxx.xxx.UserMapper.xml"></mapper>
    </mappers>

三、經過配置Mapper接口的方式來配置。

<mappers>
        <mapper class="com.lonelyWolf.mybatis.mapper.UserMapper"></mapper>
    </mappers>

四、經過配置Mapper接口包名的形式來配置

<mappers>
        <package name="com.lonelyWolf.mybatis.mapper"/>
    </mappers>

注意:在使用第3和第4兩種方式配置的時候,須要把xml映射文件和Mapper接口文件放在同一個目錄,並且必須同名。

若是用的是maven配置的話,可能會出現如下錯誤:Invalid bound statement (not found),出現以後須要注意檢查一下target下面的class目錄內有沒有xml映射文件,若是沒有的話須要在pom文件中加入如下配置(由於maven默認不會加載xml文件):

<build> 
       <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

總結

本文主要介紹了MyBatis中的核心配置文件的使用,本文其實更適合做爲手冊來參考,只需大體瀏覽,內心有個印象,須要用的時候再去查詢便可

來自:https://mp.weixin.qq.com/s/NsNhuyFVYBkcfYJPd0O4FQ

相關文章
相關標籤/搜索