1. 程式人生 > >MyBatis-Configuration解讀

MyBatis-Configuration解讀

Configuration是幹嘛的

Configuration就像是Mybatis的總管,Mybatis的所有配置資訊都存放在這裡,此外,它還提供了設定這些配置資訊的方法。Configuration可以從配置檔案裡獲取屬性值,也可以通過程式直接設定。Configuration裡可供配置的屬性有:

1.       properties屬性

1)       配置示例

  1. <propertiesresource="org/mybatis/example/config.properties">
  2. <propertyname="username"value="dev_user"/>
  3. <property
    name="password"value="F2Fa3!33TYyg"/>
  4. </properties>

2)       用途

properties裡配置的屬性將被存放在Configuration的variables變數裡,供Mybatis使用。此外在配置檔案中,也可以使用這些屬性,用來對配置項實現動態配置。比如:

  1. <dataSourcetype="POOLED">
  2. <propertyname="driver"value="${driver}"/>
  3. <propertyname="url"value="${url}"/>
  4. <propertyname="username"
    value="${username}"/>
  5. <propertyname="password"value="${password}"/>
  6. </dataSource>

3)       注意事項

resource裡也可指定屬性值,並且resource裡屬性值的優先順序高於property子節點裡配置的值,也就是說resource的同名屬性將會覆蓋於property子節點裡的值。

2.        settings設定

1)       配置示例

  1. <settings>
  2. <settingname="cacheEnabled"value="true"/>
  3. <setting
    name="lazyLoadingEnabled"value="true"/>
  4. <settingname="multipleResultSetsEnabled"value="true"/>
  5. <settingname="useColumnLabel"value="true"/>
  6. <settingname="useGeneratedKeys"value="false"/>
  7. <settingname="enhancementEnabled"value="false"/>
  8. <settingname="defaultExecutorType"value="SIMPLE"/>
  9. <settingname="defaultStatementTimeout"value="25000"/>
  10. </settings>

2)       用途

setting節點裡配置的值會直接改寫Configuration對應的變數值,這些變數描述的是Mybatis的全域性執行方式,如果對這些屬性的含義不熟悉的話建議不要配置,使用預設值即可。下面這個表格描述了各個配置項的含義和預設值:

設定引數

描述

有效值

預設值

cacheEnabled

這個配置使全域性的對映器啟用或禁用快取。

true | false

true

lazyLoadingEnabled

全域性啟用或禁用延遲載入。當禁用時,所有關聯物件都會即時載入。

true | false

true

aggressiveLazyLoading

當啟用時,有延遲載入屬性的物件在被呼叫時將會完全載入任意屬性。否則,每種屬性將會按需要載入。

true | false

true

multipleResultSetsEnabled

允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動)。

true | false

true

useColumnLabel

使用列標籤代替列名。不同的驅動在這方便表現不同。參考驅動文件或充分測試兩種方法來決定所使用的驅動。

true | false

true

useGeneratedKeys

允許JDBC支援生成的鍵。需要適合的驅動。如果設定為true則這個設定強制生成的鍵被使用,儘管一些驅動拒絕相容但仍然有效(比如Derby)。

true | false

false

autoMappingBehavior

指定MyBatis如何自動對映列到欄位/屬性。PARTIAL只會自動對映簡單,沒有巢狀的結果。FULL會自動對映任意複雜的結果(巢狀的或其他情況)。

NONE,

PARTIAL,

FULL

PARTIAL

3)       注意事項

謹慎修改這些配置值。

3.       typeAliases型別命名

1)       配置示例

  1. <typeAliases>
  2. <typeAliasalias="Author"type="domain.blog.Author"/>
  3. <typeAliasalias="Blog"type="domain.blog.Blog"/>
  4. <typeAliasalias="Comment"type="domain.blog.Comment"/>
  5. <typeAliasalias="Post"type="domain.blog.Post"/>
  6. <typeAliasalias="Section"type="domain.blog.Section"/>
  7. <typeAliasalias="Tag"type="domain.blog.Tag"/>
  8. </typeAliases>

2)       用途

別名是為Java型別命名一個短的名字。它只用在XML配置檔案裡,用來減少類完全限定名的多餘部分。例如在配置檔案裡需要使用domain.blog.Author的地方可以簡單的使用Author替換。

3)       注意事項

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

object

Object

map

Map

hashmap

HashMap

list

List

arraylist

ArrayList

collection

Collection

iterator

Iterator

4.       typeHandlers型別處理器

1)       配置示例

  1. <typeHandlers>
  2. <typeHandlerjavaType="String"jdbcType="VARCHAR"handler="org.mybatis.example.ExampleTypeHandler"/>
  3. </typeHandlers>

2)       用途

無論是MyBatis在預處理語句中設定一個引數,還是從結果集中取出一個值時,型別處理器被用來將獲取的值以合適的方式轉換成Java型別。

3)       注意事項

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

Any

其他或未指定型別

EnumTypeHandler

Enumeration型別

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

5.       objectFactory物件工廠

略(不常用)

6.       plugins外掛

1)       配置示例

  1. <plugins>
  2. <plugininterceptor="org.mybatis.example.ExamplePlugin">
  3. <propertyname="someProperty"value="100"/>
  4. </plugin>
  5. </plugins>

2)       用途

外掛可以改變某些類的執行, MyBatis允許被外掛來攔截的類有:

  1. Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)   
  2. ParameterHandler (getParameterObject, setParameters)   
  3. ResultSetHandler (handleResultSets, handleOutputParameters)   
  4. StatementHandler (prepare, parameterize, batch, update, query)  

3)       注意事項

外掛可以改變MyBatis底層的行為,因此功能非常強大。但在對MyBatis深入理解前不要急著編寫自己的外掛,因為若外掛編寫不當,將導致整個MyBatis都不能正常工作。本系列的後面會有專門的章節介紹外掛機制以及兩個有用的外掛,歡迎持續關注。

7.       environments環境

environments裡可以