跳到主要内容

类型支持

下表给出常用 BSON 类型的 Java 属性类型建议。Java/JDBC 类型见 Java/JDBC 类型关系

类型映射

向量字段的用法见向量类型

BSON 类型Java 类型说明
BSON stringString按字段名或实体属性映射读取文本。
BSON int32Integer有符号 32 位整数。
BSON int64Long有符号 64 位整数。
BSON doubleDouble64 位浮点数。
BSON booleanBoolean使用布尔语义,不作为普通整数属性。
BSON dateInstant / java.sql.Timestamp需要保留时间点时使用;仅日期业务才选择 java.sql.Date。
BSON documentMap / Bean配置方式见 JSON 字段映射
BSON arrayList配置方式见 JSON 字段映射
BSON stringEnum保存枚举名称;指定具体枚举类,并保证字段值与枚举常量一致。
BSON binarybyte[]二进制内容;不经字符编码转换。
BSON ObjectIdString实体中保存十六进制字符串;命令参数使用 ObjectId(?)

BSON date 存储时间点,而 java.sql.Date 目标只表达日期。需要保留时刻时使用 TimestampInstant。文档与数组内容应分别符合所配置的对象或列表映射。

向量类型

向量字段映射与读写见向量操作

示例:绑定布尔值并按字段读取

jdbcTemplate.execute("use test");
jdbcTemplate.execute("db.createCollection('type_example')");
jdbcTemplate.executeUpdate("test.type_example.insert({id: ?, enabled: ?})",
new Object[] { 1, true });
Boolean enabled = jdbcTemplate.queryForObject(
"test.type_example.find({id: ?}, {enabled: 1})",
new Object[] { 1 }, (rs, rowNum) -> rs.getBoolean("enabled"));

使用限制

  • 默认数值映射不保证 BigInteger 和精确小数的无损往返。
  • 第一列是文档元数据;业务字段按字段名、RowMapper 或实体读取。

数组类型

适配器已将 BSON 数组接入 JDBC ARRAY,可绑定并读取同类型的 Integer[]、Float[]、String[]。包含嵌套对象的数组可使用JSON 映射

先在 test 库中准备空的 array_example 集合:

import java.sql.Types;
import net.hasor.dbvisitor.types.SqlArg;

Integer[] values = { 10, 20, 30 };
jdbc.executeUpdate("test.array_example.insert({id: ?, int_array: ?})",
new Object[] { 1, SqlArg.valueOf(values, Types.ARRAY) });
Integer[] loaded = jdbc.queryForObject(
"test.array_example.find({id: ?}, {_id: 0, int_array: 1})",
new Object[] { 1 }, Integer[].class);