# UniDB
**Repository Path**: protect-xiaozhou/uni-db
## Basic Information
- **Project Name**: UniDB
- **Description**: 通用数据库连接工具
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-07-12
- **Last Updated**: 2025-07-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: SpringBoot, Spring-MVC, JDBC
## README
# UniDB
# 产品文档(V1.0)
**文档版本**:V1.0
**编制日期**:2025-07-12
**作者**:保护小胡
---
## 一、产品定位与价值
### 1.1 背景
在多数据库环境下,开发与运维人员常面临以下痛点:
- 不同数据库(MySQL、Oracle、ClickHouse等)的连接方式、SQL语法差异大
- 手动管理连接池繁琐,易出现资源泄露
- SQL执行结果格式不统一
- 事务管理等场景需重复开发
- 多数据库兼容性支持不足
### 1.2 项目定位
DB-Tools 是一款通用数据库中间件,通过标准化 API 接口实现对多类型数据库的统一管理与操作,屏蔽底层数据库差异,降低跨数据库开发/测试难度,提升系统可靠性与安全性。
### 1.3 核心价值
| 维度 | 价值描述 |
|----------|-----------------------------------------------------------------------------------------------|
| 效率提升 | - 统一 API 接口,减少跨数据库测试工作量(据测算可降低 60% 重复代码)
- 批量操作性能优化,提升数据处理效率 |
| 兼容性强 | - 支持 20+ 主流数据库(关系型、数据仓库、内存数据库等)
- 新增数据库类型无需修改核心代码 |
| 安全可靠 | - 内置参数化 SQL 执行、连接池加密管理、事务原子性保障
- 符合企业级安全合规要求 |
| 易于集成 | - 提供 RESTful API 与 SDK
- 支持 Java、Python 等多语言调用,无缝对接现有系统 |
---
## 二、核心功能与技术特点
### 2.1 核心功能模块
#### 模块 1:连接管理
**功能描述**
实现数据库连接的全生命周期管理,包括连接创建、池化维护、闲置清理、安全关闭。
**关键特性**
- **自动识别数据库类型**
- 通过 JDBC URL 前缀(如 `jdbc:mysql://`)自动识别数据库类型,无需手动指定驱动;
- 也支持显式指定驱动类型(如 `driverClassName=com.mysql.cj.jdbc.Driver`)以覆盖自动识别结果。
- **智能连接池**
- 基于 **HikariCP** 实现,支持以下参数配置:
- `maxActive`:最大连接数(默认 10)
- `minIdle`:最小闲置连接数(默认 5)
- `connectionTimeout`:连接超时时间(默认 30 秒)
- 自动检测连接健康状态(心跳检测),异常连接自动剔除并重建。
- **闲置连接回收**
- 定时任务(可配置间隔,默认 60 秒)清理超过 `idleTimeout`(默认 30 分钟)的闲置连接,释放系统资源。
- **连接加密**
- **密码加密**:使用 AES-256 算法加密存储数据库密码,运行时解密使用;
- **传输加密**:支持 SSL/TLS 加密连接数据库,需配置 `sslMode=REQUIRED`(如 MySQL)或 `ssl=true`(如 PostgreSQL)。
**使用流程**
1. **隐式驱动识别**(推荐):
```properties
jdbcUrl=jdbc:postgresql://host:5432/db
username=admin
password=ENC(加密的密码)

#### 模块 2:SQL 执行引擎
**功能描述**
支持各类 SQL 操作(查询、更新、批量执行),返回统一格式的结果集。
**关键特性**
- **查询操作**
- **参数化查询**
- 支持占位符语法:`SELECT * FROM t WHERE id = ?`,底层使用 `PreparedStatement` 绑定参数,彻底防止 SQL 注入。
- **结果集转换**
- 统一返回 `List
*/
@Getter
public class CustomException extends RuntimeException {
/** 错误码,全局唯一标识 */
private final String errorCode;
public CustomException(String message, String errorCode) {
super(message);
this.errorCode = errorCode;
}
public CustomException(String message, String errorCode, Throwable cause) {
super(message, cause);
this.errorCode = errorCode;
}
}
```
#### 3. 高性能设计
| 优化点 | 实现方式 | 收益 |
|----------------|-----------------------------------------------|--------------------------|
| **连接池复用** | 基于 HikariCP 维护长连接,默认最小/最大池化 | 避免频繁创建/销毁连接的开销,毫秒级响应 |
| **批量操作** | 使用 JDBC `addBatch()` + `executeBatch()` | 网络往返次数从 N → 1,性能提升 10-100 倍 |
| **结果集懒加载** | 利用 JDBC 流式结果集 (`setFetchSize`),边读边处理 | 内存占用随数据量线性增长,避免一次性加载大表 |
#### 4. 可扩展性
- **开闭原则落地**:新增数据库仅需实现 `DBConfigurer` 接口,注册到 `DB_CONFIGURERS` 即可。
- **零侵入核心**:无需改动 SQL 执行引擎、连接管理等核心逻辑,满足 **对扩展开放,对修改关闭**。
# 三、技术架构
## 3.1 整体架构

### 关键分层说明
| 层级 | 组件 / 功能 | 核心职责 |
| -------- | -------------------------------------- | ---------------------------------- |
| 客户端层 | Web 前端、Java/Python 服务、第三方系统 | 发起 HTTP 请求,调用接口层 |
| 接口层 | REST API(Swagger 文档化) | 接收请求、参数校验、路由到服务层 |
| 服务层 | DatabaseService + 子模块 | 业务逻辑处理(连接池、SQL、事务) |
| 适配层 | DBConfigurer(多数据库适配) | 数据库差异化配置(方言、连接参数) |
| 数据源层 | MySQL / Oracle / ClickHouse 等 | 最终数据存储与查询执行 |
## 3.2 核心技术栈
| 类别 | 选型 | 说明 |
| ---------- | --------------------------------- | -------------------------------------- |
| 开发语言 | Java (JDK 8) | 保持与旧系统兼容 |
| 框架 | Spring Boot 2.7.15 | 最后一个官方支持 JDK 8 的 LTS 版本 |
| Web 框架 | Spring Web (Spring MVC) | RESTful 接口 |
| 连接池 | HikariCP | 高性能、低延迟连接池 |
| API 文档 | SpringDoc OpenAPI | 基于 Swagger 3,自动生成在线文档 |
| 日志框架 | SLF4J + Logback | 统一日志门面与实现 |
| 构建工具 | Maven | 依赖管理与自动化构建 |
#### 接口文档依赖(SpringDoc OpenAPI)
在 `pom.xml` 中加入以下依赖,即可自动生成并暴露 Swagger-UI 接口文档(默认地址:`/swagger-ui.html`)。
本项目: `url/db_tool/swagger-ui.html` 可查看接口文档
```xml
org.springdoc
springdoc-openapi-ui
1.6.15
org.springdoc
springdoc-openapi-data-rest
1.6.15
```
---
## 四、使用指南
###
- **运行环境**:JDK 8,内存 ≥ 2 GB
- **依赖组件**:无(已内置所有主流数据库驱动)
- **部署方式**:Spring boot 内置Tomcat ( http )服务器
- 独立服务:直接运行 `java -jar database-service.jar`
- 嵌入式:作为依赖包引入现有 Spring Boot 应用
---
### 4.2 接口调用示例
#### 示例 1:创建连接
##### 请求
```http
POST /api/database/connect
Content-Type: application/json
{
"url": "jdbc:mysql://10.245.44.100:3306/testdb",
"username": "root",
"password": "xxxxxx",
"maxActive": 20,
"minIdle": 5,
"idleTimeout": 1800000
}
```
## 五、附录
### 错误码表
| 错误码 | HTTP 状态码 | 处理建议 |
|-------------------|-------------|--------------------------------------------------------|
| `CONNECT_ERROR` | 500 | 检查连接 URL / 账号密码,或确认数据库服务可用性 |
| `QUERY_ERROR` | 400 | 使用 SQL 语法检查工具修正语句,或联系 DBA |
| `TRANSACTION_ERROR`| 500 | 系统已自动回滚,建议拆分事务或重试 |
| `UNSUPPORTED_DB` | 400 | 不支持的数据库类型,如需扩展请联系技术支持 |
### 支持的数据库
详见 **二、核心功能与技术特点 → 模块 4:多数据库适配** 中的“已支持数据库类型”表格。
### 技术支持
- 邮箱:**protectXH@163.com**