跳到主要内容

dbVisitor

One APIs Access Any DataBase

承认差异、管理差异、而非消灭差异 —— 通过双层适配架构,通过统一 API 访问已支持的数据库。

广泛的数据库支持

覆盖多种关系型数据库方言,并通过 JDBC 驱动适配器支持 NoSQL 和向量数据库

MySQL
MariaDB
PostgreSQLOracleSQL ServerDB2DM
Xugu
Informix
TiDB
OceanBase
H2
SQLite
Derby
HSQLDB
ClickHouse
Greenplum
SAP HANA
Hive
Impala
StarRocks
Doris
RedisMongoDBElasticsearchMilvus

5 种 API 风格

选择最适合场景的 API,所有风格共享同一套底层运行机制。

⌨️

JdbcTemplate

原生 SQL 操作,最直接的数据库访问方式

查看文档
JdbcTemplate.java
JdbcTemplate jdbc = new JdbcTemplate(dataSource);

// 查询映射到 Bean
List<User> users = jdbc.queryForList(
    "select * from users where age > ?",
    new Object[] { 18 },
    User.class
);

// 查询单值
Long total = jdbc.queryForObject(
    "select count(*) from users",
    Long.class
);

同一套 API,不同的数据库

在驱动支持的范围内复用 API,SQL、字段映射和事务能力仍取决于数据源

MySQL / PostgreSQL
// 连接关系型数据库
Configuration config = new Configuration();
LambdaTemplate t = config.newLambda(ds);

// Lambda 查询
List<User> users = t
    .query(User.class)
    .eq(User::getAge, 18)
    .queryForList();
MongoDB / Elasticsearch
// 连接 NoSQL 数据库(同一套 API)
Configuration config = new Configuration();
LambdaTemplate t = config.newLambda(ds);

// 完全相同的 Lambda 查询
List<User> users = t
    .query(User.class)
    .eq(User::getAge, 18)
    .queryForList();

双层适配架构

应用层管理查询方式差异,协议层管理通信协议差异

使用不同层面的 API 来解决不同层面的问题,尊重数据源差异,管理数据源差异。

Dual-Layer Adapter Architecture

快速开始

引入核心库与目标 JDBC 驱动,以下使用最新正式版

pom.xml
<dependency>
  <groupId>net.hasor</groupId>
  <artifactId>dbvisitor</artifactId>
  <version>6.8.0</version>
</dependency>

加入社区

交流使用经验、反馈问题,参与 dbVisitor 的改进。