MyBatis-Configuration解讀
Configuration是幹嘛的
Configuration就像是Mybatis的總管,Mybatis的所有配置資訊都存放在這裡,此外,它還提供了設定這些配置資訊的方法。Configuration可以從配置檔案裡獲取屬性值,也可以通過程式直接設定。Configuration裡可供配置的屬性有:
1. properties屬性
1) 配置示例
- <propertiesresource="org/mybatis/example/config.properties">
- <propertyname="username"value="dev_user"/>
- <property
- </properties>
2) 用途
properties裡配置的屬性將被存放在Configuration的variables變數裡,供Mybatis使用。此外在配置檔案中,也可以使用這些屬性,用來對配置項實現動態配置。比如:
- <dataSourcetype="POOLED">
- <propertyname="driver"value="${driver}"/>
- <propertyname="url"value="${url}"/>
- <propertyname="username"
- <propertyname="password"value="${password}"/>
- </dataSource>
3) 注意事項
resource裡也可指定屬性值,並且resource裡屬性值的優先順序高於property子節點裡配置的值,也就是說resource的同名屬性將會覆蓋於property子節點裡的值。
2. settings設定
1) 配置示例
- <settings>
- <settingname="cacheEnabled"value="true"/>
- <setting
- <settingname="multipleResultSetsEnabled"value="true"/>
- <settingname="useColumnLabel"value="true"/>
- <settingname="useGeneratedKeys"value="false"/>
- <settingname="enhancementEnabled"value="false"/>
- <settingname="defaultExecutorType"value="SIMPLE"/>
- <settingname="defaultStatementTimeout"value="25000"/>
- </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) 配置示例
- <typeAliases>
- <typeAliasalias="Author"type="domain.blog.Author"/>
- <typeAliasalias="Blog"type="domain.blog.Blog"/>
- <typeAliasalias="Comment"type="domain.blog.Comment"/>
- <typeAliasalias="Post"type="domain.blog.Post"/>
- <typeAliasalias="Section"type="domain.blog.Section"/>
- <typeAliasalias="Tag"type="domain.blog.Tag"/>
- </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) 配置示例
- <typeHandlers>
- <typeHandlerjavaType="String"jdbcType="VARCHAR"handler="org.mybatis.example.ExampleTypeHandler"/>
- </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) 配置示例
- <plugins>
- <plugininterceptor="org.mybatis.example.ExamplePlugin">
- <propertyname="someProperty"value="100"/>
- </plugin>
- </plugins>
2) 用途
外掛可以改變某些類的執行, MyBatis允許被外掛來攔截的類有:
- Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
- ParameterHandler (getParameterObject, setParameters)
- ResultSetHandler (handleResultSets, handleOutputParameters)
- StatementHandler (prepare, parameterize, batch, update, query)
3) 注意事項
外掛可以改變MyBatis底層的行為,因此功能非常強大。但在對MyBatis深入理解前不要急著編寫自己的外掛,因為若外掛編寫不當,將導致整個MyBatis都不能正常工作。本系列的後面會有專門的章節介紹外掛機制以及兩個有用的外掛,歡迎持續關注。
7. environments環境
environments裡可以