跳到主要内容

类型支持

下表给出常用字段的 Java 属性类型建议;可空字段使用包装类型。Java/JDBC 类型见 Java/JDBC 类型关系;枚举见枚举映射

类型映射

数据库字段类型Java 类型说明
NUMBER(2)Byte覆盖 -99 至 99。
NUMBER(3)Short覆盖 -999 至 999;Byte 无法覆盖整列范围。
NUMBER(5)Integer覆盖 -99999 至 99999;Short 无法覆盖整列范围。
NUMBER(10)Long覆盖 10 位十进制整数;Integer 无法覆盖整列范围。
NUMBER(19)BigInteger覆盖 19 位十进制整数;Long 无法覆盖整列范围。
NUMBER(p, 0)BigInteger通用整数映射;范围可控时可选更小的整数类型,统一十进制模型也可用 BigDecimal。
NUMBER(p, s)BigDecimal需要小数或统一保留十进制数值时使用。
NUMBER(1)Boolean仅适用于业务约定为 0/1 的标志;普通一位整数建议 Byte。
BINARY_FLOATFloat近似数值;不用于要求十进制精确计算的金额。
BINARY_DOUBLEDouble近似数值;不用于要求十进制精确计算的金额。
CHAR(1)String文本内容;字符长度由列定义约束。
VARCHAR2(255)String文本内容;字符长度由列定义约束。
NVARCHAR2(255)String文本内容;字符长度由列定义约束。
RAW(1000)byte[]二进制内容;不经字符编码转换。
BLOBbyte[]二进制内容;不经字符编码转换。
DATEjava.sql.Timestamp保留日期和时间,精度以数据库列定义为准。
TIMESTAMPjava.sql.Timestamp保留日期和时间,精度以数据库列定义为准。
VARCHAR2(2000)Map / List / Bean保存 JSON 文本时,实体属性配置见JSON 字段映射
CLOBMap / List / Bean保存 JSON 文本时,实体属性配置见 JSON 字段映射

示例:根据表字段声明实体属性

下面是实体中的字段声明,列名通过 @Column 指定。处理器根据属性类型及映射配置选择,不需要为这些普通数值属性单独指定 JDBC 类型。

import java.math.BigDecimal;
import net.hasor.dbvisitor.mapping.Column;

// NUMBER(3)
@Column("quantity")
private Short quantity;

// NUMBER(5)
@Column("sort_no")
private Integer sortNo;

// NUMBER(10, 2)
@Column("amount")
private BigDecimal amount;

基础类型:空字符串

VARCHAR2 空字符串读取为 null。参数绑定示例及区分两种状态的方式见空字符串参数

二进制类型:空 BLOB

普通 byte[] 可以读写二进制内容,但 Oracle JDBC 的 setBytes 会把 new byte[0] 绑定为 NULL。

需要保存长度为 0 的 BLOB 时,使用 Connection.createBlob() 创建空 BLOB,再通过 PreparedStatement.setBlob() 写入。读取时,空 BLOB 返回长度为 0 的 byte[],NULL 返回 null。

数组类型

支持将 NULL 读为 Java 空值,但不支持通过通用 JDBC ARRAY 映射绑定、读取或修改非空数组。例如,不能将 Integer[]Types.ARRAY 写入。

需要在一个字段中保存列表时,使用适合的文本或 JSON 列,按JSON 字段映射配置,不要将该字段配置为 JDBC ARRAY。这和把列表展开为 IN 条件是两件事。