類型別名只是一個更短的Java類型名。它只和xml配置有關(guān),并且僅僅是為了縮減冗余的全限定類名的輸入量,例如:
使用這個配置,"Blog"現(xiàn)在可以在任何"domain.blog.Blog"可以出現(xiàn)的地方使用。
有許多內(nèi)建的常用Java類型的別名,它們是大小寫不敏感的,考慮到重載的名稱問題,要注意對于原始類型的特殊處理。
Alias | Mapped Type |
_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 |
P14:
無論何時MyBatis在PreparedStatement設(shè)置參數(shù)或從ResultSet檢索一個值,TypeHandler總是以一種適合于這種Java類型的方式來檢索到值。下面的表格描述了默認(rèn)的TypeHandler。
Type Handler | Java Types | JDBC Types |
BooleanTypeHandler | Boolean, boolean | 兼容BOOLEAN的類型 |
ByteTypeHandler | Byte, byte | 兼容NUMERIC or BYTE的類型 |
ShortTypeHandler | Short, short | 兼容NUMERIC or SHORT INTEGER的類型 |
IntegerTypeHandler | Integer, int | 兼容NUMERIC or INTEGER的類型 |
LongTypeHandler | Long, long | 兼容NUMERIC or LONG INTEGER的類型 |
FloatTypeHandler | Float, float | 兼容NUMERIC or FLOAT的類型 |
DoubleTypeHandler | Double, double | 兼容NUMERIC or DOUBLE的類型 |
BigDecimalTypeHandler | BigDecimal | 兼容NUMERIC or DECIMAL的類型 |
StringTypeHandler | String | CHAR, VARCHAR |
ClobTypeHandler | String | CLOB, LONGVARCHAR |
NStringTypeHandler | String | NVARCHAR, NCHAR |
NClobTypeHandler | String | NCLOB |
ByteArrayTypeHandler | byte[] | 兼容字節(jié)流(byte stream type)的類型 |
BlobTypeHandler | byte[] | BLOB, LONGVARBINARY |
DateTypeHandler | Date (java.util) | TIMESTAMP |
DateOnlyTypeHandler | Date (java.util) | DATE |
TimeOnlyTypeHandler | Date (java.util) | TIME |
SqlTimestampTypeHandler | Timestamp (java.sql) | TIMESTAMP |
SqlDateTypeHadler | Date (java.sql) | DATE |
SqlTimeTypeHandler | Time (java.sql) | TIME |
ObjectTypeHandler | Any | 其它或未定義的 |
EnumTypeHandler | Enumeration Type | VARCHAR – 任何兼容字符串的類型, 當(dāng)編碼被存儲時 (不是索引). |
P15:
你可以覆蓋type handler或定制一個去處理不支持或非標(biāo)準(zhǔn)化的類型。為此,只要實現(xiàn)TypeHandler接口(org.mybatis.type)、映射TypeHandler實現(xiàn)類到一個Java類型(也可以是一個JDBC類型)就行了,例如:
使用這樣一個TypeHandler會覆蓋現(xiàn)存的Java字符串屬性、varchar參數(shù)和結(jié)果的type handler。注意:MyBatis不會依據(jù)數(shù)據(jù)庫元數(shù)據(jù)自省出類型,所以必須定義參數(shù)和結(jié)果映射中的類型是一個varchar字段才能鉤住正確的type handler. 這是因為MyBatis不會感知到數(shù)據(jù)類型,除非語句被執(zhí)行。
每當(dāng)MyBatis創(chuàng)建結(jié)果對象的新實例時,它會使用一個ObjectFactory實例來達到此目的。默認(rèn)的ObjectFactory只是用默認(rèn)構(gòu)造函數(shù)來初始化這個目標(biāo)類,如果參數(shù)映射存在,就使用一個參數(shù)化的構(gòu)造函數(shù)。如果想覆蓋ObjectFactory的默認(rèn)行為,可以自己創(chuàng)建一個。例如: