首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入浅出Mybatis的核心配置之类型处理

Mybatis的配置文件mybatis-config.xml文档顶层结构如下:

上一篇文章我们全面分析了setting配置,本文继续往下分析,今天重点放在Mybatis如何将Java类型和数据库类型之间进行相互转换。

No.1 typeAliases配置

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:

可以使用注解的方式来配置别名,具体代码如下:

除了自己定义的Java类型外,常见的Java内建的数据类型也是有别名的,具体对应关系如下:

以_开头的映射到基本数据类型,没有_的映射到包装类型。

No.2 typeHandlers 配置

在Mybatis中,无论是在预处理语句(PreparedStatement)中设置一个参数,还是在结果集(ResultSet)中获取一个值,Mybatis都会用类型处理器将获取的值以合适的方式转换为Java类型。

我们先来看看Mybatis中自带的类型处理器,具体如下:

BooleanTypeHandler

Java 类型:java.lang.Boolean, boolean

JDBC 类型:数据库兼容的 BOOLEAN

ByteTypeHandler

Java 类型:java.lang.Byte, byte

JDBC 类型:数据库兼容的 NUMERIC 或 BYTE

ShortTypeHandler

Java 类型:java.lang.Short, short

JDBC 类型:数据库兼容的 NUMERIC 或 SHORT INTEGER

IntegerTypeHandler

Java 类型:java.lang.Integer, int

JDBC 类型:数据库兼容的 NUMERIC 或 INTEGER

LongTypeHandler

Java 类型:java.lang.Long, long

JDBC 类型:数据库兼容的 NUMERIC 或 LONG INTEGER

FloatTypeHandler

Java 类型:java.lang.Float, float

JDBC 类型:数据库兼容的 NUMERIC 或 FLOAT

DoubleTypeHandler

Java 类型:java.lang.Double, double

JDBC 类型:数据库兼容的 NUMERIC 或 DOUBLE

BigDecimalTypeHandler

Java 类型:java.math.BigDecimal

JDBC 类型:数据库兼容的 NUMERIC 或 DECIMAL

StringTypeHandler

Java 类型:java.lang.String

JDBC 类型:CHAR, VARCHAR

ClobReaderTypeHandler

Java 类型:java.io.Reader

JDBC 类型:-

ClobTypeHandler

Java 类型:java.lang.String

JDBC 类型:CLOB, LONGVARCHAR

NStringTypeHandler

Java 类型:java.lang.String

JDBC 类型:NVARCHAR, NCHAR

NClobTypeHandler

Java 类型:java.lang.String

JDBC 类型:NCLOB

BlobInputStreamTypeHandler

Java 类型:java.io.InputStream

JDBC 类型:-

ByteArrayTypeHandler

Java 类型:byte[]

JDBC 类型:数据库兼容的字节流类型

BlobTypeHandler

Java 类型:byte[]

JDBC 类型:BLOB, LONGVARBINARY

DateTypeHandler

Java 类型:java.util.Date

JDBC 类型:TIMESTAMP

DateOnlyTypeHandler

Java 类型:java.util.Date

JDBC 类型:DATE

TimeOnlyTypeHandler

Java 类型:java.util.Date

JDBC 类型:TIME

SqlTimestampTypeHandler

Java 类型:java.sql.Timestamp

JDBC 类型:TIMESTAMP

SqlDateTypeHandler

Java 类型:java.sql.Date

JDBC 类型:DATE

SqlTimeTypeHandler

Java 类型:java.sql.Time

JDBC 类型:TIME

ObjectTypeHandler

Java 类型:Any

JDBC 类型:OTHER 或未指定类型

EnumTypeHandler

Java 类型:Enumeration Type

JDBC 类型:VARCHAR-任何兼容的字符串类型,存储枚举的名称(而不是索引)

EnumOrdinalTypeHandler

Java 类型:Enumeration Type

JDBC 类型:任何兼容的 NUMERIC 或 DOUBLE 类型,存储枚举的索引(而不是名称)。

InstantTypeHandler

Java 类型:java.time.Instant

JDBC 类型:TIMESTAMP

LocalDateTimeTypeHandler

Java 类型:java.time.LocalDateTime

JDBC 类型:TIMESTAMP

LocalDateTypeHandler

Java 类型:java.time.LocalDate

JDBC 类型:DATE

LocalTimeTypeHandler

Java 类型:java.time.LocalTime

JDBC 类型:TIME

OffsetDateTimeTypeHandler

Java 类型:java.time.OffsetDateTime

JDBC 类型:TIMESTAMP

OffsetTimeTypeHandler

Java 类型:java.time.OffsetTime

JDBC 类型:TIME

ZonedDateTimeTypeHandler

Java 类型:java.time.ZonedDateTime

JDBC 类型:TIMESTAMP

YearTypeHandler

Java 类型:java.time.Year

JDBC 类型:INTEGER

MonthTypeHandler

Java 类型:java.time.Month

JDBC 类型:INTEGER

YearMonthTypeHandler

Java 类型:java.time.YearMonth

JDBC 类型:VARCHAR or LONGVARCHAR

JapaneseDateTypeHandler

然后在mybatis-config.xml中进行配置,具体代码如下:

必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。 这是因为:MyBatis 直到语句被执行才清楚数据类型。

小结

通过typeHandlers配置,告知Mybatis如何来将Java类型数据转换为JDBC类型的数据,也告知了Mybatis如何将JDBC类型数据转换为Java类型数据,同时还支持枚举类型(字典)的自动转换,非常之方便强大。

·end·

- 如果喜欢,快分享给你的朋友们吧 -

我们一起愉快的玩耍吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180722G1B0YD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券