分享

《MyBatis用户指南》-自定义带参数的类型转换器 typeHandler

 CevenCheng 2012-04-28

   类型别名只是一个更短的Java类型名。它只和xml配置有关,并且仅仅是为了缩减冗余的全限定类名的输入量,例如:

   

 

  

   使用这个配置,"Blog"现在可以在任何"domain.blog.Blog"可以出现的地方使用。

   有许多内建的常用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

typeHandlers

  无论何时MyBatisPreparedStatement设置参数或从ResultSet检索一个值,TypeHandler总是以一种适合于这种Java类型的方式来检索到值。下面的表格描述了默认的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[]

兼容字节流(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 – 任何兼容字符串的类型当编码被存储时 (不是索引).

 

 

 

P15

       你可以覆盖type handler或定制一个去处理不支持或非标准化的类型。为此,只要实现TypeHandler接口(org.mybatis.type)、映射TypeHandler实现类到一个Java类型(也可以是一个JDBC类型)就行了,例如:

  

       使用这样一个TypeHandler会覆盖现存的Java字符串属性、varchar参数和结果的type handler。注意:MyBatis不会依据数据库元数据自省出类型,所以必须定义参数和结果映射中的类型是一个varchar字段才能钩住正确的type handler. 这是因为MyBatis不会感知到数据类型,除非语句被执行。

 

objectFactory

       每当MyBatis创建结果对象的新实例时,它会使用一个ObjectFactory实例来达到此目的。默认的ObjectFactory只是用默认构造函数来初始化这个目标类,如果参数映射存在,就使用一个参数化的构造函数。如果想覆盖ObjectFactory的默认行为,可以自己创建一个。例如:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多