数据源差异
dbVisitor 力争使用统一的 API 来操作所有 关系型数据库 和 非关系型数据库。但实际中数据源由于其本身的特性仍存在一些个体差异。 dbVisitor 对待差异的处理方式主要体现在两个方面:
- API 支持性,是指被调用的 API 在某数据源上是否支持。
- 数据库方言,是指在使用 构造器 API 时相同 API 操不同数据库时采用了不同的命令或语法。
特点
您若想改变这些差异,可以参与项目并贡献您的改进代码。
数据源支持一览
dbVisitor 在统一内核架构下设计了 4 种 API:编程式 API、声明式 API、构造器 API、Mapper File。 其中 JdbcTemplate、注解方式、Mapper File 在所有数据源上均可使用。
dbVisitor 具备智能的方言推断能力,会自动根据 JDBC URL 识别目标数据库类型并配置最佳方言,通常 无需手动配置。
如需显式指定,支持 方言别名(如 mysql)或 方言全限定类名。
下表汇总了各数据源的 API 支持与方言特性差异,各列含义:
- 构造器 API — 包含 LambdaTemplate、BaseMapper、对象映射和结果集映射,四者支持性一致
- 写入冲突 — 所有数据源均支持标准写入(Into),此列仅标注额外支持的冲突策略(详解)
- 分页 — 方言是否实现
PageSqlDialect接口 - 序列 — 方言是否实现
SeqSqlDialect接口 - 向量 — 方言是否实现
VectorSqlDialect接口(详解) - 空值排序 — 方言是否覆写了
orderByNulls方法
| 数据源 | 配置 Key | 构造器 API | Batch | 存储过程 | 自增回填 | 分页 | 写入冲突 | 序列 | 向量 | 空值排序 |
|---|---|---|---|---|---|---|---|---|---|---|
| MySQL | mysql | ✅ | ✅ | ✅ | ✅ | ✅ | Ignore Update | ✅ | ||
| MariaDB | mariadb | ✅ | ✅ | ✅ | ✅ | ✅ | Ignore Update | ✅ | ||
| PostgreSQL | postgresql | ✅ | ✅ | ✅ | ✅ | ✅ | Ignore Update¹ | ✅ | ✅ | |
| 人大金仓 | kingbase | ✅ | ✅ | ✅ | ✅ | ✅ | Ignore Update¹ | ✅ | ✅ | |
| Oracle | oracle | ✅ | ✅ | ✅ | ✅ | ✅ | Ignore¹ Update¹ | |||
| 达梦 | dm | ✅ | ✅ | ✅ | ✅ | ✅ | Ignore¹ | |||
| SQL Server | sqlserver/ jtds | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| SQL Server (jTDS) | jtds | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| DB2 | db2 | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| H2 | h2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||
| Apache Derby | derby | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| HSQL | hsql | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| Hive | hive | ✅ | ✅ | ✅ | ✅ | ⚠️ | ||||
| Apache Impala | impala | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| IBM Informix | informix | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| SQLite | sqlite | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| 虚谷数据库 | xugu | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| Redis | — | ❌ | ❌ | ❌ | ❌ | |||||
| MongoDB | mongo | ✅ | ❌ | ❌ | ✅ | ✅ | ||||
| ElasticSearch 6 | elastic6 | ✅ | ❌ | ❌ | ✅ | ✅ | ||||
| ElasticSearch 7 | elastic7 | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | |||
| ElasticSearch 8 | elastic8 | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | |||
| Milvus | milvus | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
✅ 支持 ❌ 不支持
¹ 需有主键
⚠️ Hive:虽然实现了
PageSqlDialect,但countSql和pageSql均会抛出UnsupportedOperationException,实际不可用。
JDBC 特性支持
对于非关系型数据库驱动(Mongo、Elastic),dbVisitor 实现了 Statement.RETURN_GENERATED_KEYS 特性。
这意味着在使用 JdbcTemplate 或 Statement 执行插入操作时,可以自动获取生成的 _id。
非关系型数据源指南
- Redis — 支持 140+ 命令,5 种数据类型操作;不支持构造器 API 和对象映射
- MongoDB — 完整 CRUD 支持,ObjectId 自动映射,分页查询;不支持批量和存储过程
- ElasticSearch — 完整 CRUD 支持,基于 REST DSL;不支持批量和存储过程
- Milvus — SQL 风格语法操作向量数据库,完整 CRUD 支持,KNN 近邻搜索与范围搜索;不支持批量和存储过程