mybatis入門基礎(三)----SqlMapConfig.xml全域性配置檔案解析

阿赫瓦里發表於2015-06-29

一:SqlMapConfig.xml配置檔案的內容和配置順序如下

  1. properties(屬性)
  2. settings(全域性配置引數)
  3. typeAiases(型別別名)
  4. typeHandlers(型別處理器)
  5. objectFactory(物件工廠)
  6. plugins(外掛)
  7. environments(環境集合屬性物件)mappers(對映器)
    1. environment(環境子屬性物件)
    2. transactionManager(事物管理)
    3. datesource(資料來源
  8. mappers(對映器)

二:properties屬性

  作用:將資料連線單獨配置在db.properties中,只需要在SqlMapConfig.xml中載入db.properties的屬性值,在SqlMapConfig.xml中就不需要對資料庫連線引數進行硬編碼。資料庫連線引數只配置在db.properties中,方便對引數進行統一管理,其它xml可以引用該db.properties。

db.properties的內容:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

在SqlMapConfig.xml中載入db.properties

 <!-- 載入資料庫檔案db.properties -->
<properties resource="db.properties"> <!-- properties中還可以配置一些屬性名和屬性值,此處的優先載入 --> <!-- <property name="driver" value=""/> --> </properties> <!-- 和spring整合後 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理,事務控制由mybatis管理--> <transactionManager type="JDBC" /> <!-- 資料庫連線池,由mybatis管理--> <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>

properties特性:

注意:

  • 在properties元素體內定義的屬性優先讀取。
  • 然後讀取properties元素中resource或url載入的屬性,它會覆蓋已讀取的同名屬性。
  • 最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性

建議:

  不要在properties元素體內新增任何屬性值,只將屬性值定義在properties檔案中。

  在properties檔案中定義屬性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)

三:settings全域性引數配置

  mybatis框架執行時可以調整一些執行引數。比如,開啟二級快取,開啟延遲載入等等。全域性引數會影響mybatis的執行行為。

mybatis-settings的配置屬性以及描述

setting(設定) Description(描述) valid Values(驗證值組) Default(預設值)
cacheEnabled 在全域性範圍內啟用或禁用快取配置 任何對映器在此配置下。 true | false TRUE
lazyLoadingEnabled 在全域性範圍內啟用或禁用延遲載入。禁用時,所有相關聯的將熱載入。 true | false TRUE
aggressiveLazyLoading 啟用時,有延遲載入屬性的物件將被完全載入後呼叫懶惰的任何屬性。否則,每一個屬性是按需載入。 true | false TRUE
multipleResultSetsEnabled 允許或不允許從一個單獨的語句(需要相容的驅動程式)要返回多個結果集。 true | false TRUE
useColumnLabel 使用列標籤,而不是列名。在這方面,不同的驅動有不同的行為。參考驅動文件或測試兩種方法來決定你的驅動程式的行為如何。 true | false TRUE
useGeneratedKeys 允許JDBC支援生成的金鑰。相容的驅動程式是必需的。此設定強制生成的鍵被使用,如果設定為true,一些驅動會不相容性,但仍然可以工作。 true | false FALSE
autoMappingBehavior 指定MyBatis的應如何自動對映列到欄位/屬性。NONE自動對映。 PARTIAL只會自動對映結果沒有巢狀結果對映定義裡面。 FULL會自動對映的結果對映任何複雜的(包含巢狀或其他)。

NONE,PARTIAL,FULL

PARTIAL
defaultExecutorType 配置預設執行人。SIMPLE執行人確實沒有什麼特別的。 REUSE執行器重用準備好的語句。 BATCH執行器重用語句和批處理更新。

SIMPLE,REUSE,BATCH

SIMPLE
safeRowBoundsEnabled 允許使用巢狀的語句RowBounds。 true | false FALSE
mapUnderscoreToCamelCase 從經典的資料庫列名A_COLUMN啟用自動對映到駱駝標識的經典的Java屬性名aColumn。 true | false FALSE
localCacheScope MyBatis的使用本地快取,以防止迴圈引用,並加快反覆巢狀查詢。預設情況下(SESSION)會話期間執行的所有查詢快取。如果localCacheScope=STATMENT本地會話將被用於語句的執行,只是沒有將資料共享之間的兩個不同的呼叫相同的SqlSession。

SESSION

STATEMENT

SESSION
dbcTypeForNull 指定為空值時,沒有特定的JDBC型別的引數的JDBC型別。有些驅動需要指定列的JDBC型別,但其他像NULL,VARCHAR或OTHER的工作與通用值。 JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER OTHER
lazyLoadTriggerMethods 指定觸發延遲載入的物件的方法。 A method name list separated by commas equals,clone,hashCode,toString
defaultScriptingLanguage 指定所使用的語言預設為動態SQL生成。 A type alias or fully qualified class name.

org.apache.ibatis.scripting.xmltags

.XMLDynamicLanguageDriver

callSettersOnNulls 指定如果setter方法​​或地圖的put方法時,將呼叫檢索到的值是null。它是有用的,當你依靠Map.keySet()或null初始化。注意原語(如整型,布林等)不會被設定為null。 true | false FALSE
logPrefix 指定的字首字串,MyBatis將會增加記錄器的名稱。 Any String Not set
logImpl 指定MyBatis的日誌實現使用。如果此設定是不存在的記錄的實施將自動查詢。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING Not set
proxyFactory 指定代理工具,MyBatis將會使用建立懶載入能力的物件。 CGLIB | JAVASSIST  CGLIB

官方文件settings的例子

<setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="multipleResultSetsEnabled" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25"/>
    <setting name="safeRowBoundsEnabled" value="false"/>
    <setting name="mapUnderscoreToCamelCase" value="false"/>
    <setting name="localCacheScope" value="SESSION"/>
    <setting name="jdbcTypeForNull" value="OTHER"/>
    <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
View Code

四:typeAiases(別名)--重點掌握

  在mapper.xml中,定義很多的statementstatement需要parameterType指定輸入引數的型別、需要resultType指定輸出結果的對映型別。

     如果在指定型別時輸入型別全路徑,不方便進行開發,可以針對parameterTyperesultType指定的型別定義一些別名,在mapper.xml中通過別名定義,方便開發。

4.1.mybatis預設支援的別名

別名

對映的型別

_byte 

byte 

_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 

 

4.2.自定義別名

  4.2.1:單個別名定義(在SqlMapConfig.xml)  

<!-- 別名定義:針對單個別名定義 type:型別的路徑; alias:別名 -->
    <typeAliases><typeAlias type="com.mybatis.entity.User" alias="user"/></typeAliases>

    UserMapper.xml引用別名:

<select id="findUserById" parameterType="int" resultType="user" >
      select * from t_user where id=#{id}
</select>

  4.2.2:批量定義別名(常用) 

<!-- 批量別名的定義:
        package:指定包名,mybatis會自動掃描包中的pojo類,自動定義別名,別名就是類名(首字母大寫或小寫都可以)
 -->
     <typeAliases>
         <package name="com.mybatis.entity"/>
<package name="其它包"/>
</typeAliases>

五:typeHandlers(型別處理器)

  mybatis中通過typeHandlers完成jdbc型別和java型別的轉換。

  通常情況下,mybatis提供的型別處理器滿足日常需要,不需要自定義.

mybatis支援型別處理器:

型別處理器

Java型別

JDBC型別

BooleanTypeHandler 

Boolean,boolean 

任何相容的布林值

ByteTypeHandler 

Byte,byte 

任何相容的數字或位元組型別

ShortTypeHandler 

Short,short 

任何相容的數字或短整型

IntegerTypeHandler 

Integer,int 

任何相容的數字和整型

LongTypeHandler 

Long,long 

任何相容的數字或長整型

FloatTypeHandler 

Float,float 

任何相容的數字或單精度浮點型

DoubleTypeHandler 

Double,double 

任何相容的數字或雙精度浮點型

BigDecimalTypeHandler 

BigDecimal 

任何相容的數字或十進位制小數型別

StringTypeHandler 

String 

CHAR和VARCHAR型別

ClobTypeHandler 

String 

CLOB和LONGVARCHAR型別

NStringTypeHandler 

String 

NVARCHAR和NCHAR型別

NClobTypeHandler 

String 

NCLOB型別

ByteArrayTypeHandler 

byte[] 

任何相容的位元組流型別

BlobTypeHandler 

byte[] 

BLOB和LONGVARBINARY型別

DateTypeHandler 

Date(java.util)

TIMESTAMP型別

DateOnlyTypeHandler 

Date(java.util)

DATE型別

TimeOnlyTypeHandler 

Date(java.util)

TIME型別

SqlTimestampTypeHandler 

Timestamp(java.sql)

TIMESTAMP型別

SqlDateTypeHandler 

Date(java.sql)

DATE型別

SqlTimeTypeHandler 

Time(java.sql)

TIME型別

ObjectTypeHandler 

任意

其他或未指定型別

EnumTypeHandler 

Enumeration型別

VARCHAR-任何相容的字串型別,作為程式碼儲存(而不是索引)。

六:mappers(對映配置)

6.1:通過resource載入單個對映檔案

<!-- 載入對映檔案 -->
    <mappers>
    <!--通過resource方法一次載入一個對映檔案  -->
        <mapper resource="sqlmap/User.xml"/>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

6.2:通過mapper介面載入單個對映檔案

    <!-- 通過mapper介面載入單個對映配置檔案
            遵循一定的規範:需要將mapper介面類名和mapper.xml對映檔名稱保持一致,且在一個目錄中;
            上邊規範的前提是:使用的是mapper代理方法;
      -->
         <mapper class="com.mybatis.mapper.UserMapper"/> 

按照上邊的規範,將mapper.javamapper.xml放在一個目錄 ,且同名。

6.3:批量載入mapper(推薦使用)

    <!-- 批量載入對映配置檔案,mybatis自動掃描包下面的mapper介面進行載入
        遵循一定的規範:需要將mapper介面類名和mapper.xml對映檔名稱保持一致,且在一個目錄中;
            上邊規範的前提是:使用的是mapper代理方法;
      -->
    <package name="com.mybatis.mapper"/> 

 

相關文章