mybatis入門基礎(三)----SqlMapConfig.xml全局配置文件解析

一: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。java

db.properties的內容:mysql

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

在SqlMapConfig.xml中加載db.propertiesspring

 <!-- 加載數據庫文件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特性:sql

注意:數據庫

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

建議:apache

  不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。緩存

  在properties文件中定義屬性名要有必定的特殊性,如xxxx.xxxx(jdbc.driver)mybatis

三:settings全局參數配置

  mybatis框架運行時能夠調整一些運行參數。好比,開啓二級緩存,開啓延遲加載等等。全局參數會影響mybatis的運行行爲。app

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"/> 
相關文章
相關標籤/搜索