mybatis配置文件詳解

 

 

1. <properties>元素java

<properties>是一個配置屬性的元素,該元素一般用來將內部的配置外在化,即經過外部的配置來動態的替換內部定義的屬性。mysql

例如:數據庫的鏈接屬性,就能夠經過專門配置db.properties而後替換掉裏面的配置信息。sql

編寫db.properties數據庫

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://1localhost:3306;DatabaseName=mybatis
jdbc.username=root
jdbc.password=123456

配置<properties>屬性緩存

<properties resource="db.properties"></properties>

這個時候只須要在引用db.properties中的數據庫相關信息就能夠了服務器

<dataSource type="POOLED">
   <!-- 數據庫驅動 -->
   <property name="driver" value="${jdbc.driver}" />
   <!-- 鏈接數據庫的url -->
   <property name="url" value="${jdbc.url}" />
   <!-- 鏈接數據庫的用戶名 -->
   <property name="username" value="${jdbc.username}" />
   <!-- 鏈接數據庫的密碼 -->
   <property name="password" value="${jdbc.password}" />
</dataSource>

2.<settings>元素mybatis

<settings>元素主要用於改變MyBatis運行時的行爲,例如開啓二級緩存、開啓延遲加載等。<settings>元素中常見的配置及其描述以下表所示。併發

設置參數 描述 有效值 默認值
cacheEnabled 該配置影響全部映射器中配置的緩存全局開關 ture|false false
lazyLoadingEnabled 延遲加載的全局開關。開啓時全部關聯對象都會延遲加載。特定關聯關係中能夠經過設置fetchType屬性來覆蓋該項的開關狀態 ture|false false
agressiveLazyLoading 關聯對象屬性的延遲加載開關。當啓用時,對任意延遲屬性的調用會使帶有延遲加載屬性的對象徹底加載;反之,每種屬性都會按需加載 ture|false true
multipleResultSetsEnabled 是否容許單一語句返回多結果集(須要驅動兼容) ture|false true
useColumnLabel 使用列標籤代替列名。不一樣的驅動在這方面有不一樣的表現。具體可參考驅動文檔或經過測試兩種模式來觀察所用驅動的行爲。 ture|false true
useGeneratedKeys 容許JDBC支持自動生成主鍵,須要驅動兼容。若是設置爲true,則這個設置強制使用自動生成主鍵,儘管一些驅動不兼容但仍可正常工做。 ture|false false
autoMappingBehavior 指定mybatis應如何自動映射列到字段或屬性。NONE表示取消自動映射;PARTIAL只會自動映射沒有定義嵌套結果集映射的結果集;FULL會自動映射任意複雜的結果集(不管是否嵌套) NONE、PARTIAL、FULL PARTIAL
defaultExecutorType 配置默認的執行器。SIMPLE就是普通的執行器;REUSE執行器會重用預處理語句(prepared statements);BATCH執行器將重用語句並執行批量更新。 SIMPLE、REUSE、BATCH SIMPLE
defaultStatementTimeOut 設置超時時間。它決定驅動等待數據庫響應的秒數。當沒有設置的時候,它取的就是驅動默認的時間。 任何正整數 沒有設置
mapUnderscoreToCamelCase 是否開啓自動駝峯命名規則(camel case)映射 true|false false
jdbcTypeForNull 當沒有爲參數提供特定的JDBC類型時,爲空值指定JDBC類型。某些驅動須要指定列的JDBC類型,多數狀況直接使用通常類型便可。如NULL、Varchar、other等。 NULL、Varchar、other other

配置舉例以下:app

<settings>框架

  <setting name="cacheEnabled" value="true"/>

  <setting name="LazyLoadingEnabled" value="true"/>

<settings>

 

3.<typeAliases>元素

<typeAliases>元素用於爲配置文件中的Java類型設置別名。別名設置好了事後能夠在mapper.xml文件中直接使用別名便可。其使用的意義在於減小全限定類名的冗餘。

  1. 使用<typeAliases>元素配置別名的方法以下:

     <typeAliases>
            <typeAlias alias="user" type="com.itheima.po.User"/>
        <!--若是省略alias屬性,mybatis會默認將類名首字母小寫後的名稱做爲別名-->
    </typeAliases>
  1. 當POJO類過多時,能夠經過自動掃描包的形式自定義別名,具體以下:

    <typeAliases>
            <package name="com.itheima.po"/>
        <!--mybatis會將全部com.itheima.po包中的POJO類以首字母小寫的非限定類名來做爲它的別名-->
    </typeAliases>

建議使用掃描包的形式設置別名。

注意:上面設置別名的方式只適用於沒有使用註解的狀況,若是在程序中使用了註解,則其別名爲註解的值。例如:

@Alias(value="user")

public class User{

//屬性和方法。。。。

}

除了使用<typeAliases>元素自定義別名外,mybatis框架還默認爲許多常見的java類型(如數值、字符串、日期等)提供了相應的別名,以下表所示。

別名 映射的類型
_byte btye
_long  long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

 

以上表格中列舉的別名能夠直接在mybatis中使用,可是因爲不區分大小寫,在使用的時候須要注意重複定義的問題。

 

4.<typeHandlers>元素

mybatis在預處理語句(prepareStatement)中設置一個參數或者從結果集(ResultSet)中取出一個值時,都會用到其框架內部註冊了的typehandler(類型處理器)進行相關的處理。typeHandler的做用就是將預處理語句中傳入的參數從javaType(Java類型)轉換爲jdbcType(JDBC類型),或者從數據庫取出結果時將jdbcType轉換爲javaType。也就是將數據庫類型與java類型映射關聯起來。

爲了方便轉換,mybatis提供了默認一些默認的類型處理器,以下表所示。

類型處理器 java類型 jdbc類型
BooleanTypeHandler java.lang.Boolean ,boolean 數據庫兼容的BOOLEAN
ByteTypeHandler java.lang.Byte ,byte 數據庫兼容的numeric或byte
ShortTypeHandler java.lang.Short ,short 數據庫兼容的numeric或者short integer
IntegerTypeHandler java.lang.Integer ,int 數據庫兼容的numeric或者integer
LongTypeHandler java.lang.Long ,long 數據庫兼容的numeric或者long integer
FloatTypeHandler java.lang.Float ,float 數據庫兼容的numeric或者Float
DoubleTypeHandler java.lang.Double ,double 數據庫兼容的numeric或者double
BigDecimalTypeHandler java.math.BigDecimal 數據庫兼容的numeric或者decimal
StringTypeHandler java.lang.String char,varchar
ClobTypeHandler java.lang.String clob、longvarchar
ByteArrayTypeHandler byte[] 數據庫兼容的字節流類型
BlobTypeHandler byte[] blob、longvarbinary
DateTypeHandler java.util.Date timestamp
SqlTimestampTypeHandler java.sql.timestamp timestamp
SqlDateTypeHandler java.sql.Date date
SqlTimeTypeHandler java.sql.time time

若是以上類型處理器沒法知足需求時能夠經過自定義類型處理器。<typeHandler>元素能夠在配置文件中註冊自定義的類型處理器,它的使用方式有兩種。

1.註冊一個類的類型處理器

     <typeHandlers> 
         <typeHandler handler="com.itheima.type.CustomtypeHandler" />
    </typeHandlers>

2.註冊一個包中全部的類型處理器

     <typeHandlers> 
         <package name="com.itheima.type" />
    </typeHandlers>

5.<objectFactory>元素

MyBatis中默認的ObjectFactory的做用是實例化目標類,它既能夠經過默認構造方法實例化,也能夠在參數映射存在的時候經過參數構造方法來實例化。一般使用默認的ObjectFactory便可。

大部分場景下都不用配置和修改默認的ObjectFactory ,若是想覆蓋ObjectFactory的默認行爲,能夠經過自定義ObjectFactory來實現,具體以下:

1.自定義一個對象工廠

public class MyObjectFactory extends DefaultObjectFactory {
           private static final long serialVersionUID = -4114845625429965832L;
           public <T> T create(Class<T> type) {
   return super.create(type);
          }
           public <T> T create(Class<T> type, List<Class<?>> constructorArgTypes,
                        List<Object> constructorArgs) {
   return super.create(type, constructorArgTypes, constructorArgs);
          }
           public void setProperties(Properties properties) {
   super.setProperties(properties);
          }
           public <T> boolean isCollection(Class<T> type) {
   return Collection.class.isAssignableFrom(type);
          }
  }

2.在配置文件中使用<objectFactory>元素配置自定義的ObjectFactory

<objectFactory type="com.itheima.factory.MyObjectFactory">
    <property name="name" value="MyObjectFactory"/>
</objectFactory>

在開發中這個元素沒有怎麼使用,通常瞭解就能夠了,知道有這個東西就行。

6.<plugins>元素

MyBatis容許在已映射語句執行過程當中的某一點進行攔截調用,這種攔截調用是經過插件來實現的。元素的做用就是配置用戶所開發的插件。 若是用戶想要進行插件開發,必需要先了解其內部運行原理,由於在試圖修改或重寫已有方法的行爲時,極可能會破壞MyBatis原有的核心模塊。慎用。

7.<environments>元素

<environments>元素用於對環境進行配置。MyBatis的環境配置實際上就是數據源的配置,咱們能夠經過元素配置多種數據源,即配置多種數據庫。

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

<transactionManager>元素用於配置事務管理,它的type屬性用於指定事務管理的方式,即便用哪一種事務管理器;<dataSource>元素用於配置數據源,它的type屬性用於指定使用哪一種數據源。

在MyBatis中,能夠配置兩種類型的事務管理器,分別是JDBC和MANAGED。關於這兩個事務管理器的描述以下:

  • JDBC:此配置直接使用了JDBC的提交和回滾設置,它依賴於從數據源獲得的鏈接來管理事務的做用域。

  • MANAGED:此配置歷來不提交或回滾一個鏈接,而是讓容器來管理事務的整個生命週期。默認狀況下,它會關閉鏈接,但一些容器並不但願這樣,爲此能夠將closeConnection屬性設置爲false來阻止它默認的關閉行爲。

注意:若是項目中使用的是Spring+ MyBatis,則沒有必要在MyBatis中配置事務管理器,由於實際開發中,會使用Spring自帶的管理器來實現事務管理。

對於數據源的配置,MyBatis提供了UNPOOLED、POOLED、JNDI三種數據源類型。

UNPOOLED 配置此數據源類型後,在每次被請求時會打開和關閉鏈接。它對沒有性能要求的簡單應用程序是一個很好的選擇。在使用時,須要配置5種屬性。

Pooled

此數據源利用「池」的概念將JDBC鏈接對象組織起來,避免了在建立新的鏈接實例時所須要初始化和認證的時間。這種方式使得併發Web應用能夠快速的響應請求,是當前流行的處理方式。在使用時,能夠配置更多的屬性。

JNDI

能夠在EJB或應用服務器等容器中使用。容器能夠集中或在外部配置數據源,而後放置一個JNDI上下文的引用。在使用時,須要配置2個屬性。

9.<mappers>元素

<mappers>元素用於指定MyBatis映射文件的位置,通常可使用如下4種方法引入映射器文件

1.使用類路徑引入(經常使用)

<mappers>
   <mapper resource="com/itheima/mapper/UserMapper.xml"/>
</mappers>

2.使用本地文件路徑引入

<mappers>
   <mapper url="file:///D:/com/itheima/mapper/UserMapper.xml"/>
</mappers>

3.使用接口類引入

<mappers>
   <mapper class="com.itheima.mapper.UserMapper"/>
</mappers>

4.使用包名引入(經常使用

<mappers>    <package name="com.itheima.mapper"/></mappers>
相關文章
相關標籤/搜索