跳到主要内容

dbVisitor

One APIs Access Any DataBase

承认差异、管理差异、而非消灭差异 —— 通过双层适配架构,让一套 API 自然地访问任何数据库。

广泛的数据库支持

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

MySQL
PostgreSQL
Oracle
SQL Server
DB2
ClickHouse
TiDB
OceanBase
DM
StarRocks
Doris
Redis
MongoDB
Elasticsearch
Milvus

核心理念

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

🔗
统一 APIs
编程式、声明式、Mapper、XML File 等 5 种 APIs
📐
双层适配架构
应用访问层、标准驱动层、独立演进、独立使用
🧩
零耦合
可复杂、可简单、自由集成、任意使用

双层适配架构

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

Dual-Layer Adapter Architecture

5 种 API 风格

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

⌨️

JdbcTemplate

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

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

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

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

同一套 API,不同的数据库

无论底层是 MySQL 还是 MongoDB,上层代码保持一致

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

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

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

快速开始

只需一个 Maven 依赖,即可开始使用

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