SSM-Mybatis-配置-typeHandler

SSM-Mybatis-配置-typeHandler

​ typeHandler是承担jdbcType和javaType之间的相互转换,大多数情况下,是不需要去配置typeHandler,javaType,jdbcType,应为Mybatis会探测用什么类型的typeHandler进行处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTdux2hQ-1614220867984)(C:\Users\Administrator\Desktop\学习笔记\SSM\img\image-20210225083655885.png)]


系统定义的typeHandler

类型处理器Java 类型JDBC 类型
BooleanTypeHandlerjava.lang.Boolean, boolean数据库兼容的 BOOLEAN
ByteTypeHandlerjava.lang.Byte, byte数据库兼容的 NUMERICBYTE
ShortTypeHandlerjava.lang.Short, short数据库兼容的 NUMERICSMALLINT
IntegerTypeHandlerjava.lang.Integer, int数据库兼容的 NUMERICINTEGER
LongTypeHandlerjava.lang.Long, long数据库兼容的 NUMERICBIGINT
FloatTypeHandlerjava.lang.Float, float数据库兼容的 NUMERICFLOAT
DoubleTypeHandlerjava.lang.Double, double数据库兼容的 NUMERICDOUBLE
BigDecimalTypeHandlerjava.math.BigDecimal数据库兼容的 NUMERICDECIMAL
StringTypeHandlerjava.lang.StringCHAR, VARCHAR
ClobReaderTypeHandlerjava.io.Reader-
ClobTypeHandlerjava.lang.StringCLOB, LONGVARCHAR
NStringTypeHandlerjava.lang.StringNVARCHAR, NCHAR
NClobTypeHandlerjava.lang.StringNCLOB
BlobInputStreamTypeHandlerjava.io.InputStream-
ByteArrayTypeHandlerbyte[]数据库兼容的字节流类型
BlobTypeHandlerbyte[]BLOB, LONGVARBINARY
DateTypeHandlerjava.util.DateTIMESTAMP
DateOnlyTypeHandlerjava.util.DateDATE
TimeOnlyTypeHandlerjava.util.DateTIME
SqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMP
SqlDateTypeHandlerjava.sql.DateDATE
SqlTimeTypeHandlerjava.sql.TimeTIME
ObjectTypeHandlerAnyOTHER 或未指定类型
EnumTypeHandlerEnumeration TypeVARCHAR 或任何兼容的字符串类型,用来存储枚举的名称(而不是索引序数值)
EnumOrdinalTypeHandlerEnumeration Type任何兼容的 NUMERICDOUBLE 类型,用来存储枚举的序数值(而不是名称)。
SqlxmlTypeHandlerjava.lang.StringSQLXML
InstantTypeHandlerjava.time.InstantTIMESTAMP
LocalDateTimeTypeHandlerjava.time.LocalDateTimeTIMESTAMP
LocalDateTypeHandlerjava.time.LocalDateDATE
LocalTimeTypeHandlerjava.time.LocalTimeTIME
OffsetDateTimeTypeHandlerjava.time.OffsetDateTimeTIMESTAMP
OffsetTimeTypeHandlerjava.time.OffsetTimeTIME
ZonedDateTimeTypeHandlerjava.time.ZonedDateTimeTIMESTAMP
YearTypeHandlerjava.time.YearINTEGER
MonthTypeHandlerjava.time.MonthINTEGER
YearMonthTypeHandlerjava.time.YearMonthVARCHARLONGVARCHAR
JapaneseDateTypeHandlerjava.time.chrono.JapaneseDateDATE

自定义typeHandler

​ 要实现typeHandler就需要实现接口typeHandler,或者继承BaseTypeHandler(实际上它也继承了typeHandler接口),继承实现了以后还需要在配置文件中添加如下代码:

    <typeHandlers>
        <typeHandler handler="mybatis" jdbcType="VARCHAR" javaType="string"/>
    </typeHandlers>

启动typeHandler有两种方式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZJATzWKT-1614220867988)(C:\Users\Administrator\Desktop\学习笔记\SSM\img\image-20210225090405455.png)]

  1. 要么指定于定义typeHandler一样的jdbcType和javaType
  2. 要么直接使用typeHandler指定具体的实现类

如果在配置文件中通过扫描的方式配置TypeHandler,则无法指定javaType和jdbcType,

    <typeHandlers>
        <package name="mybatis"/>
    </typeHandlers>

这种方式没有办法指定javaType和jdbcTyep,但是可以通过注解的方式设置:

@MappedTypes(String.class)
@MappedjdbcTypes(jdbcType.VACHAR);
public class StringTypeHandler implements TypeHandler<String> {
    ...
}

枚举typeHandler

​ 若想映射枚举类型 Enum,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选择一个来使用。


版权声明:本文为weixin_43958223原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。