<typeHandler>元素
MyBatis在预处理语句(PreparedStatement)中设置一个参数或者从结果集(ResultSet)中取出一个值时,都会用其框架内部注册了的typeHandler(类型处理器)进行相关处理。typeHandler的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType。
为了方便转换,MyBatis框架提供了一些默认的类型处理器,其常用的类型处理器如表1所示。
表1 常用的类型处理器
类型处理器 | Java**类型** | JDBC**类型** |
---|---|---|
BooleanTypeHandler | java.lang.Boolean,boolean | 数据库兼容的BOOLEAN |
ByteTypeHandler | java.lang.Byte,byte | 数据库兼容的NUMERIC或BYTE |
ShortTypeHandler | java.lang.Short,short | 数据库兼容的NUMERIC或SHORT INTEGER |
IntegerTypeHandler | java.lang.Integer,int | 数据库兼容的NUMERIC或INTEGER |
LongTypeHandler | java.lang.Long,long | 数据库兼容的NUMERIC或LONG INTEGE |
FloatTypeHandler | java.lang.Float,float | 数据库兼容的NUMERIC或FLOAT |
DoubleTypeHandler | java.lang.Double,double | 数据库兼容的NUMERIC或DOUBLE |
BigDecimalTypeHandler | java.math.BigDecimal | 数据库兼容的NUMERIC或DECIMAL |
StringTypeHandler | java.lang.String | CHAR,VARCHAR |
ClobTypeHandler | java.lang.String | CLOB,LONGVARCHAR |
ByteArrayTypeHandler | byte[] | 数据库兼容的字节流类型 |
BlobTypeHandler | byte[] | BLOB,LONGVARBINARY |
DateTypeHandler | java.util.Date | TIMESTAMP |
SqlTimestampTypeHandler | java.sql.Timestamp | TIMESTAMP |
SqlDateTypeHandler | java.sql.Date | DATE |
SqlTimeTypeHandler | java.sql.Time | TIME |
当MyBatis框架所提供的这些类型处理器不能够满足需求时,还可以通过自定义的方式对类型处理器进行扩展(自定义类型处理器可以通过实现TypeHandler接口或者继承BaseTypeHandle类来定义)。<typeHandler>元素就是用来在配置文件中注册自定义的类型处理器的。它的使用方式有两种,具体如下:
1.注册一个类的类型处理器
<typeHandlers>
<!-- 以单个类的形式配置 -->
<typeHandler handler="com.itheima.type.CustomtypeHandler" />
</typeHandlers>
上述代码中,子元素<typeHandler>的handler属性用于指定在程序中自定义的类型处理器类。
2.注册一个包中所有的类型处理器
<typeHandlers>
<!-- 注册一个包中所有的typeHandler,系统在启动时会自动扫描包下的所有文件-->
<package name="com.itheima.type" />
</typeHandlers>
上述代码中,子元素<package>的name属性用于指定类型处理器所在的包名,使用此种方式后,系统会在启动时自动的扫描com.itheima.type包下所有的文件,并把它们作为类型处理器。