跳到主要内容

v6.7.1 (2026-07-14)

<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor</artifactId>
<version>6.7.1</version>
</dependency>

主要看点

  1. 重构批量插入与生成键回填链路,由数据库方言选择 JDBC Batch、多 Values、逐条执行或 ResultSet 回填策略。
  2. 新增 GeneratedKeySourceGeneratedKeyStrategy,支持 SQL Server OUTPUT INSERTED 等从插入结果集返回主键的场景。
  3. ClickHouse、DB2、DM、H2、MySQL、Oracle、PostgreSQL、SQL Server 等方言的插入能力统一收敛到 InsertSqlDialect

影响范围

  • 构建系统:由 Maven 迁移至 Gradle。
  • 插入执行链路:批量插入、冲突策略、序列、自增主键与生成键回填。
  • 方言系统:ClickHouse、DB2、DM、H2、MongoDB、MySQL、Oracle、PostgreSQL、SQL Server。
  • 类型处理:日期时间、数组与 UUID 生成键兼容性。
  • JDBC Adapter:适配器注册 API、Milvus 异步命令及扩展实例化方式。

更新内容

  • 新增
    • 新增 GeneratedKeySource,允许 @Insert 和 XML insert 在 JDBC getGeneratedKeys 与当前 ResultSet 之间选择生成键来源。
    • 新增 GeneratedKeyStrategy,区分 JDBC Batch、批量 Generated Keys、多 Values ResultSet 和逐条执行等插入方式。
    • SQL Server 方言支持 OUTPUT INSERTED,可在多行插入时读取并回填主键。
    • 新增 ClickHouse 方言及关键字定义。
    • DB2、H2 增加序列与插入方言能力;DM 增加序列查询及基于 MERGE 的冲突更新。
  • 优化
    • 将批量插入策略下沉至 InsertSqlDialect,由各方言统一描述 SQL、冲突能力和生成键策略。
    • 按数据库能力选择 Batch、多 Values 或逐条执行,避免假设所有驱动具备相同行为。
    • 优化仅包含主键列时的 Ignore/Update 冲突策略,避免生成无效更新语句。
    • 统一使用 Cobble 5.x 创建 Dialect、TypeHandler、SqlRule、KeySeqHolderFactory、DataSource 及 Adapter 扩展实例。
    • AdapterManager 使用 register 表达注册语义,并提供接收 ClassLoader 的重载;lookup 只按 Adapter 名称查询。
    • 优化 Milvus 异步命令的同步等待逻辑。
  • 修复
    • 修复多个日期时间 TypeHandler 在不同数据库间的兼容差异。
    • 修复 ArrayTypeHandler 的数据库数组兼容问题。
    • 修复 MySQL orderByNulls 在 DEFAULT 策略下列名黏连的问题。
    • 为 UUID32、UUID36 写入增加目标类型检查,避免不兼容类型被静默注入。

升级提示

  • Maven Wrapper 已移除,源码构建请使用 ./gradlew./build.sh
  • 自定义 Adapter 若使用旧的 AdapterManager.lookup(..., ClassLoader) 注册方式,请迁移到 register
  • 自定义 InsertSqlDialect 应明确返回对应的 GeneratedKeyStrategy;通过插入结果集返回主键时应使用 GeneratedKeySource.ResultSet