# DBTools **Repository Path**: leoZhangs/dbtools ## Basic Information - **Project Name**: DBTools - **Description**: 一个基于Qt和Maridb(Mysql)数据的SQL语句生成与基础的数据管理功能,包括数据库表结构字段映射,数据表格展示,数据自定义筛选,删除与批量删除,SQL生成等功能 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 3 - **Created**: 2023-12-13 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DBTools 仿照 MyBatis 设计的 C++ 数据库简易 ORM 工具,支持 Python 代码自动生成、RTTR 属性反射字段映射、Qt 桌面端 GUI 交互。 ## 设计思想 | 层级 | 说明 | |---|---| | **代码生成** (`tools/`) | Python (SQLAlchemy) 连接 MySQL,读取表结构元数据,自动生成 C++ 数据实体、DAO 类和 Qt 界面代码 | | **ORM 映射** (`src/DBBaseAutoGen/`) | 基于 [RTTR](https://www.rttr.org/) 运行时反射,将 C++ 结构体的属性自动映射到数据库字段,无需手写映射代码 | | **SQL 生成** | 类似 MyBatis,由 DAO 基类模板化生成 SELECT / INSERT / DELETE SQL 语句,WHERE 条件支持动态组合 | | **GUI 交互** (`src/DBGUIAutoGen/`) | Qt5 桌面应用,支持条件查询、批量删除、表格展示,字段名中英文自动映射 | ## 核心流程 ``` MySQL 数据库 ──(Python 读取表结构)──> TableConfig JSON ──(合并用户配置)──> JSON 配置文件 │ ▼ CppTemplate ──(模板生成)──> C++ 源码 │ ▼ ┌──────────────────────────────────────────┐ │ auto-gen: {Table}Struct.h/.cpp │ │ 数据结构体 + DAO 类 (RTTR 注册) │ │ auto-gen: {Table}DBGenGui.h/.cpp │ │ GUI 界面类 (宏展开) │ └──────────────────────────────────────────┘ │ ▼ 运行时 ┌──────────────────────────────────────────┐ │ 用户点击"查询" → BaseDBWidgetHelper │ │ → DAO::genSelectSQL() → MySQL 执行 │ │ → RTTR 反射将结果行映射回 C++ 对象 │ └──────────────────────────────────────────┘ ``` ## 技术栈 | 类型 | 技术 | 用途 | |---|---|---| | 语言 | C++17, Python 3.9+ | 应用 + 代码生成 | | 构建 | CMake 3.10+ + Ninja (MSVC v141) | 编译 | | GUI | Qt 5.12.8 | 桌面界面 | | 反射 | [RTTR](https://www.rttr.org/) | 属性运行时注册、字段映射、元数据注解 | | 数据库 | MariaDB C Connector (`libmariadb`) | MySQL 连接与查询 | | JSON | jsoncpp, rapidjson | 配置文件解析、序列化 | | 日志 | Google glog | 运行时日志 | | 格式化 | {fmt} | SQL 语句构造 | | Python | SQLAlchemy + PyMySQL | 表结构内省 | ## 目录结构 ``` DBTools/ ├── CMakeLists.txt # CMake 构建配置 ├── main.cpp # 应用入口 (Qt 启动、DB 连接、GUI 展示) ├── tools/ # Python 代码生成工具 │ ├── CreatorTableMeta.py # 主脚本:连接 DB → 读表结构 → 生成 C++ 代码 │ ├── CppTemplate.py # C++ 代码模板 (.h / .cpp 模板字符串) │ └── TableConfig.py # 配置数据类 (from_dict / to_dict 序列化) ├── config/ │ └── tableConfig/ # 自动生成的表配置文件 (JSON) │ ├── sstr.json │ ├── sstf.json │ └── ... ├── src/ │ ├── base/ # 基础设施层 (MySQL 连接池、字符串工具) │ ├── DBBaseAutoGen/ # ORM 核心框架 │ │ ├── BaseDBData.h/cpp # 字段类型枚举、WHERE 条件、表配置结构 │ │ ├── BaseDBInfo.h/cpp # DAO 基类 (SQL 生成 + 执行) │ │ ├── BaseDBWidget.h/cpp # Qt 表格浏览基类 │ │ ├── BaseDBWidgetHelper.h# 模板类:桥接 DAO 与 Widget (RTTR 驱动) │ │ ├── BaseDBMacro.h # GUI 类宏 (消除重复样板代码) │ │ ├── BaseQueryWidget.h # 查询条件对话框 │ │ └── ui/ # Qt Designer UI 文件 │ ├── DBDataAutoGen/ # [自动生成] 数据实体 + DAO (每表 2 文件) │ ├── DBGUIAutoGen/ # [自动生成] GUI 界面类 (每表 2 文件) │ ├── DBServer/ # (预留) 服务端模式 │ ├── rttr_serialization/ # RTTR 序列化 (to_json / from_json) │ └── BasicEndDataManager.* # 应用主窗口 ├── header/mysql/ # MariaDB C 头文件 └── bin/ # 第三方依赖库 (jsoncpp, mariadb, fmt, rttr, ...) ``` ## 快速开始 ### 1. 代码生成 (Python) 编辑 `tools/CreatorTableMeta.py`,修改数据库连接信息: ```python server_url = 'mysql+pymysql://root:password@localhost:3306/your_database' ``` 运行生成脚本: ```bash cd tools python CreatorTableMeta.py ``` 脚本将: - 连接指定数据库,遍历所有表 - 生成 `config/tableConfig/{表名}.json` 配置文件 - 生成 `src/DBDataAutoGen/{表名}Struct.h/.cpp` (数据结构 + DAO) - 生成 `src/DBGUIAutoGen/{表名}DBGenGui.h/.cpp` (GUI 类) ### 2. 构建 (CMake) ```bash mkdir build && cd build cmake --preset=x64-Debug .. cmake --build . ``` ### 3. 运行 ```bash .\build\x64-Debug\DBTools.exe ``` ## 自定义配置 生成的 `config/tableConfig/{表名}.json` 支持手动编辑: ```json { "Table": "sstr", "Key": { "Column": "id", "Increment": true }, "Column": [ { "Field": "id", "Type": "bigint", "Length": 0, "Precision": 0, "Scale": 0, "MaxNumber": 9999.0, "MinNumber": 0.0, "Nullable": false, "Comment": "编号", "Selected": [] } ], "QueryCount": 0 } ``` - `Key`: 主键字段及是否自增 - `Column[].Comment`: 字段中文名(显示在 GUI 表头) - `Column[].Selected`: 预设查询条件数组 - `MaxNumber / MinNumber`: 数值范围校验 重新运行代码生成脚本时会**保留用户自定义**的 `Selected`、`MaxNumber`、`MinNumber` 配置。 ## 支持的数据库字段类型 | 类型 | 枚举值 | 说明 | |---|---|---| | `int` | `FieldType::INT` | 整数 | | `bigint` | `FieldType::LONGLONG` | 长整数 | | `float` | `FieldType::FLOAT` | 单精度浮点 | | `double` | `FieldType::DOUBLE` | 双精度浮点 | | `varchar/text` | `FieldType::STRING` | 字符串 | | `date` | `FieldType::DATE` | 日期 | | `datetime/timestamp` | `FieldType::DATETIME` | 日期时间 | ## 支持的 WHERE 条件 | 类型 | 条件 | 适用字段 | |---|---|---| | 数值 | `=`, `<=`, `<`, `>=`, `>`, `!=` | int, bigint, float, double | | 字符串 | `=`, `!=`, `like` | varchar, text | | 日期 | `=`, `<=`, `<`, `>=`, `>` | date, datetime | ## 扩展新表 只需在数据库中添加新表,重新运行 `CreatorTableMeta.py` 即可自动生成所有相关代码,无需手动编写任何 C++ 映射。 ## 依赖 - CMake >= 3.10 - Visual Studio 2017 (MSVC v141) - Qt 5.12.8 (Widgets, Gui, Core) - MariaDB C Connector - RTTR (Run Time Type Reflection) - jsoncpp - rapidjson - {fmt} - google-glog - Python 3.9+ with SQLAlchemy + PyMySQL ## 许可证 查看 [LICENSE](./LICENSE) 文件。