跳到主要内容

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.1</version>
</dependency>

加入社区

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