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·
- 如果喜欢,快分享给你的朋友们吧 -
我们一起愉快的玩耍吧
领取专属 10元无门槛券
私享最新 技术干货