学科分类
目录
SSM框架

<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包下所有的文件,并把它们作为类型处理器。

点击此处
隐藏目录