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 类型 |
---|---|---|
BooleanTypeHandler | java.lang.Boolean , boolean | 数据库兼容的 BOOLEAN |
ByteTypeHandler | java.lang.Byte , byte | 数据库兼容的 NUMERIC 或 BYTE |
ShortTypeHandler | java.lang.Short , short | 数据库兼容的 NUMERIC 或 SMALLINT |
IntegerTypeHandler | java.lang.Integer , int | 数据库兼容的 NUMERIC 或 INTEGER |
LongTypeHandler | java.lang.Long , long | 数据库兼容的 NUMERIC 或 BIGINT |
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 |
ClobReaderTypeHandler | java.io.Reader | - |
ClobTypeHandler | java.lang.String | CLOB , LONGVARCHAR |
NStringTypeHandler | java.lang.String | NVARCHAR , NCHAR |
NClobTypeHandler | java.lang.String | NCLOB |
BlobInputStreamTypeHandler | java.io.InputStream | - |
ByteArrayTypeHandler | byte[] | 数据库兼容的字节流类型 |
BlobTypeHandler | byte[] | BLOB , LONGVARBINARY |
DateTypeHandler | java.util.Date | TIMESTAMP |
DateOnlyTypeHandler | java.util.Date | DATE |
TimeOnlyTypeHandler | java.util.Date | TIME |
SqlTimestampTypeHandler | java.sql.Timestamp | TIMESTAMP |
SqlDateTypeHandler | java.sql.Date | DATE |
SqlTimeTypeHandler | java.sql.Time | TIME |
ObjectTypeHandler | Any | OTHER 或未指定类型 |
EnumTypeHandler | Enumeration Type | VARCHAR 或任何兼容的字符串类型,用来存储枚举的名称(而不是索引序数值) |
EnumOrdinalTypeHandler | Enumeration Type | 任何兼容的 NUMERIC 或 DOUBLE 类型,用来存储枚举的序数值(而不是名称)。 |
SqlxmlTypeHandler | java.lang.String | SQLXML |
InstantTypeHandler | java.time.Instant | TIMESTAMP |
LocalDateTimeTypeHandler | java.time.LocalDateTime | TIMESTAMP |
LocalDateTypeHandler | java.time.LocalDate | DATE |
LocalTimeTypeHandler | java.time.LocalTime | TIME |
OffsetDateTimeTypeHandler | java.time.OffsetDateTime | TIMESTAMP |
OffsetTimeTypeHandler | java.time.OffsetTime | TIME |
ZonedDateTimeTypeHandler | java.time.ZonedDateTime | TIMESTAMP |
YearTypeHandler | java.time.Year | INTEGER |
MonthTypeHandler | java.time.Month | INTEGER |
YearMonthTypeHandler | java.time.YearMonth | VARCHAR 或 LONGVARCHAR |
JapaneseDateTypeHandler | java.time.chrono.JapaneseDate | DATE |
自定义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)]
- 要么指定于定义typeHandler一样的jdbcType和javaType
- 要么直接使用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
中选择一个来使用。