跳到主要内容

类型处理器

确定一个类型处理器的顺序如下:

  • 1st Java + Jdbc
  • 2st Java
  • 3st Jdbc
  • 4st 使用 UnknownTypeHandler

类型处理器名称规则

dbVisitor 有着丰富的类型处理器,为了方便理解这些类型处理器它们有着统一的命名规则。这些规则分为三种:

  1. <Java类型名>TypeHandler
  2. <JDBC类型名>As<Java类型名>TypeHandler
  3. <xxx>TypeHandler

类型处理器匹配表(第一优先级)

提示

下面表格中 Java类型 和 JDBC 必须全部满足才能选择对应的 类型处理器,也是第一优先级。

JDBC 类型Java 类型类型处理器
Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHARjava.time.MonthDayStringAsMonthDayTypeHandler
Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT, Types.FLOAT, Types.DOUBLE, Types.REAL, Types.NUMERIC, Types.DECIMALjava.time.MonthDayIntegerAsMonthDayTypeHandler
Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHARjava.time.YearMonthStringAsYearMonthTypeHandler
Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT, Types.FLOAT, Types.DOUBLE, Types.REAL, Types.NUMERIC, Types.DECIMALjava.time.YearMonthIntegerAsYearMonthTypeHandler
Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHARjava.time.YearStringAsYearTypeHandler
Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT, Types.FLOAT, Types.DOUBLE, Types.REAL, Types.NUMERIC, Types.DECIMALjava.time.YearIntegerAsYearTypeHandler
Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHARjava.time.MonthStringAsMonthTypeHandler
Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT, Types.FLOAT, Types.DOUBLE, Types.REAL, Types.NUMERIC, Types.DECIMALjava.time.MonthIntegerAsMonthTypeHandler
Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.DATALINK, Types.ROWIDjava.lang.StringStringTypeHandler
Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHARjava.lang.StringNStringTypeHandler
Types.CLOBjava.lang.StringClobAsStringTypeHandler
Types.NCLOBjava.lang.StringNClobAsStringTypeHandler
Types.SQLXMLjava.lang.StringSqlXmlTypeHandler
Types.CHAR, Types.VARCHAR, Types.LONGVARCHARjava.io.ReaderStringAsReaderTypeHandler
Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHARjava.io.ReaderNStringAsReaderTypeHandler
Types.CLOBjava.io.ReaderClobAsReaderTypeHandler
Types.NCLOBjava.io.ReaderNClobAsReaderTypeHandler
Types.SQLXMLjava.io.ReaderSqlXmlForReaderTypeHandler
Types.BINARY, Types.VARBINARY, Types.LONGVARBINARY, Types.ROWIDbyte[]BytesTypeHandler
Types.BLOBbyte[]BlobAsBytesTypeHandler
Types.BINARY, Types.VARBINARY, Types.LONGVARBINARY, Types.ROWIDjava.lang.Byte[]BytesAsBytesWrapTypeHandler
Types.BLOBjava.lang.Byte[]BlobAsBytesWrapTypeHandler
Types.BINARY, Types.VARBINARY, Types.LONGVARBINARYjava.io.InputStreamBytesAsInputStreamTypeHandler
Types.BLOBjava.io.InputStreamBlobAsInputStreamTypeHandler
Types.SQLXMLjava.io.InputStreamSqlXmlForInputStreamTypeHandler
Types.ARRAYjava.lang.ObjectArrayTypeHandler
Types.DATALINKjava.net.URIURITypeHandler
Types.DATALINKjava.net.URLURLTypeHandler

类型处理器匹配表(第二、三优先级)

下面表格中 Java类型 和 JDBC 只需满足任意一个,即可激活对应的 类型处理器
JDBC 类型Java 类型类型处理器
Types.BIT, Types.BOOLEANjava.lang.Boolean, booleanBooleanTypeHandler
Types.TINYINTjava.lang.Byte, byteByteTypeHandler
Types.SMALLINTjava.lang.Short, shortShortTypeHandler
Types.INTEGERjava.lang.Integer, intIntegerTypeHandler
Types.BIGINTjava.lang.Long, longLongTypeHandler
Types.FLOATjava.lang.Float, floatFloatTypeHandler
Types.DOUBLEjava.lang.Double, doubleDoubleTypeHandler
Types.REAL, Types.NUMERIC, Types.DECIMALjava.math.BigDecimalBigDecimalTypeHandler
-java.lang.NumberNumberTypeHandler
Types.CHARjava.lang.Character, charStringAsCharTypeHandler
Types.NCHAR-NStringAsCharTypeHandler
Types.VARCHAR, Types.LONGVARCHAR, Types.ROWIDjava.lang.StringStringTypeHandler
Types.NVARCHAR, Types.LONGNVARCHAR-NStringTypeHandler
Types.CLOBjava.sql.ClobClobAsStringTypeHandler
Types.NCLOBjava.sql.NClobNClobAsStringTypeHandler
Types.TIMESTAMPjava.util.DateSqlTimestampAsDateTypeHandler
Types.DATE-SqlDateAsDateHandler
-java.sql.DateSqlDateTypeHandler
-java.sql.TimestampSqlTimestampTypeHandler
-java.sql.TimeSqlTimeTypeHandler
Types.TIME-SqlTimeAsDateTypeHandler
-java.time.InstantSqlTimestampAsInstantTypeHandler
-java.time.chrono.JapaneseDateJapaneseDateAsSqlDateTypeHandler
-java.time.YearSqlTimestampAsYearTypeHandler
-java.time.MonthSqlTimestampAsMonthTypeHandler
-java.time.YearMonthSqlTimestampAsYearMonthTypeHandler
-java.time.MonthDaySqlTimestampAsMonthDayTypeHandler
-java.time.LocalDateLocalDateTimeAsLocalDateTypeHandler
-java.time.LocalTimeLocalTimeTypeHandler
-java.time.LocalDateTimeLocalDateTimeTypeHandler
-java.time.ZonedDateTimeOffsetDateTimeAsZonedDateTimeTypeHandler
Types.TIMESTAMP_WITH_TIMEZONEjava.time.OffsetDateTimeOffsetDateTimeTypeHandler
Types.TIME_WITH_TIMEZONEjava.time.OffsetTimeOffsetTimeTypeHandler
-java.math.BigIntegerBigIntegerTypeHandler
-java.io.ReaderStringAsReaderTypeHandler
-java.io.InputStreamBytesAsInputStreamTypeHandler
-java.lang.Byte[]BytesAsBytesWrapTypeHandler
Types.BINARY, Types.VARBINARY, Types.LONGVARBINARYbyte[]BytesTypeHandler
Types.BLOBjava.sql.BlobBlobAsBytesTypeHandler
Types.DATALINKjava.net.URIURLTypeHandler
-java.net.URLURLTypeHandler
Types.JAVA_OBJECT-ObjectTypeHandler
Types.ARRAYjava.lang.Object[]ArrayTypeHandler
Types.SQLXML-SqlXmlTypeHandler
Types.OTHERjava.lang.ObjectUnknownTypeHandler

其它类型处理器

地理信息类型处理器,用于处理 GIS 相关数据。主要格式有 WKB、WKT 两种格式

类型处理器Java类型作用
JtsGeometryWktAsWkbTypeHandlerbyte[]基于 JTS 的地理信息处理器,以 WKB 形式,读写 WKT 格式数据
JtsGeometryWkbAsWktTypeHandlerjava.lang.String基于 JTS 的地理信息处理器,以 WKT 格式读写 WKB 格式数据
JtsGeometryWkbHexAsWktTypeHandlerjava.lang.String基于 JTS 的地理信息处理器,以 WKT 形式,读写 WKB(HEX) 数据(数据库存储读使用 十六进制字符串)

自动时区转换,时区的写入和读取会转换为 UTC。

类型处理器Java类型作用
SqlTimestampAsUTCOffsetDateTimeTypeHandlerjava.time.OffsetDateTime自动时区转换,使用时区 OffsetDateTime 类型读写 Timestamp 数据
SqlTimestampAsUTCOffsetTimeTypeHandlerjava.time.OffsetTime自动时区转换,使用时区 OffsetTime 类型读写 Timestamp 数据

用以超大数值的存储,当某个数值已经超出了数据库存储精度范围,那么可以使用字符串进行存储。 同时程序上依然使用 BigDecimal 或 BigInteger 来处理它们

类型处理器Java类型作用
StringAsBigDecimalTypeHandlerjava.math.BigDecimal超大数读写,使用 BigDecimal 类型读写 string 数据
StringAsBigIntegerTypeHandlerjava.math.BigInteger超大数读写,使用 BigInteger 类型读写 string 数据

对于 java.sql.Timestamp 类型提供到 Java8 新时间类型的映射和读写。减少程序上的转换和处理

类型处理器Java类型作用
SqlTimestampAsLocalDateTimeTypeHandlerjava.time.LocalDateTime使用 LocalDateTime 类型读写,提供类型转换
SqlTimestampAsLocalDateTypeHandlerjava.time.LocalDate使用 LocalDate 类型读写,缺失的时间信息使用 00:00 补充
SqlTimestampAsLocalTimeTypeHandlerjava.time.LocalTime使用 LocalTime 类型读写,缺失的时间信息使用 0000-01-01 补充

PostgreSQL 数据库的特种类型处理器

类型处理器Java类型作用
PgArrayTypeHandlerArray处理 PostgreSQL 的数组类读写
PgMoneyAsBigDecimalTypeHandlerjava.math.BigDecimal支持 PostgreSQL,Money 类型

其它处理器

类型处理器Java类型作用
EnumTypeHandlerjava.lang.Enum用于将枚举类型的映射和读写,并提供 EnumOfCode、EnumOfValue 两个接口的支持
IntegerAsBooleanTypeHandlerjava.lang.Boolean, boolean用于数值类型和布尔类型的映射,任何一个非零的整数都会被解析为 true
IntegerAsBooleanTypeHandlerjava.lang.Boolean, boolean用于数值类型和布尔类型的映射,任何一个非零的整数都会被解析为 true