datai/docs/sql/template.md
Kris b7163d555b feat: 实现动态数据源延迟加载功能 (2026-01-21-001)
## 功能概述
- 实现动态数据源的延迟加载机制,支持应用启动时只加载主库,从库按需动态加载和切换
- 从库配置存储在主库中,支持运行时灵活切换从库库名
- 使用现有的 @DataSource 注解进行数据源切换,业务代码无需修改

## 新增功能
- 动态数据源管理接口 IDynamicDataSourceManager
- 动态数据源服务接口 IDynamicDataSourceService
- 动态数据源服务实现 DynamicDataSourceServiceImpl
- 数据源管理控制器 DatasourceController
- 数据源配置表 sys_datasource_config

## 新增文档
- 需求文档: docs/requirements/2026-01-21-001-动态数据源延迟加载.md
- 设计文档: docs/design/2026-01-21-001-动态数据源延迟加载设计.md
- 决策记录: docs/decisions/2026-01-21-001-ADR-动态数据源延迟加载.md
- SQL 脚本: docs/sql/2026-01-21-001-sys_datasource_config.sql
- 提示词: docs/prompts/2026-01-21-001-动态数据源延迟加载代码生成提示词.md
- 会话记录: docs/sessions/2026-01-21-001-session.md
- 变更日志: docs/changelog/2026-01-21-001-changelog.md
- 复盘文档: docs/retros/2026-01-21-001-retro.md
- API 文档: docs/api-docs/2026-01-21-001-api.md
- 根目录变更日志: CHANGELOG.md

## 修改功能
- 扩展 DataSourceManager 类,添加动态数据源管理方法
- 扩展 SysDatasourceConfigMapper 接口,添加 selectSysDatasourceConfigByDsName 方法
- 更新项目索引和 Authentication.canvas

## 修复问题
- 修复循环依赖问题:创建 IDynamicDataSourceManager 接口解决 datai-system 和 datai-framework 互相依赖
- 修复导入错误:删除 DynamicDataSourceServiceImpl 中未使用的导入
- 修复异常处理:将 setFilters() 调用移到 try-catch 块内

## API 接口
- POST /system/datasource/loadSlave - 加载从库数据源
- POST /system/datasource/switchSlave/{dbName} - 切换从库库名
- GET /system/datasource/getSlaveConfig - 获取从库配置
- POST /system/datasource/switch/{dsName} - 切换数据源
- DELETE /system/datasource/{dsName} - 移除数据源
2026-01-21 18:24:24 +08:00

209 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SQL 文档模板
## 元数据
- 需求编号:
- 创建时间YYYY-MM-DD
- 创建人:
- 版本1.0.0
- 文档类型:数据库设计文档/SQL查询文档/存储过程文档/数据流程文档
## 数据库基本信息
- **数据库系统**MySQL/PostgreSQL/Oracle/其他
- **数据库名称**
- **版本**
- **环境**:开发/测试/生产
## 文档概述
- **文档目标**
- **适用范围**
- **使用对象**
## 数据库结构
### 数据库关系图
```
[数据库表关系的可视化表示]
```
### 表结构
#### 表 1[表名]
- **描述**
- **表结构**
| 字段名 | 数据类型 | 约束 | 默认值 | 描述 |
| ------ | ------ | ---- | ------ | ---- |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | - | 主键 |
| name | VARCHAR(50) | NOT NULL | - | 名称 |
| create_time | DATETIME | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
| update_time | DATETIME | NOT NULL | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
- **索引**
| 索引名 | 类型 | 字段 | 描述 |
| ------ | ---- | ---- | ---- |
| idx_name | INDEX | name | 名称索引 |
- **备注**
#### 表 2[表名]
- **描述**
- **表结构**
| 字段名 | 数据类型 | 约束 | 默认值 | 描述 |
| ------ | ------ | ---- | ------ | ---- |
| id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | - | 主键 |
| foreign_id | BIGINT | NOT NULL, FOREIGN KEY REFERENCES table1(id) | - | 外键 |
| value | VARCHAR(100) | NOT NULL | - | 值 |
- **索引**
| 索引名 | 类型 | 字段 | 描述 |
| ------ | ---- | ---- | ---- |
| idx_foreign_id | INDEX | foreign_id | 外键索引 |
- **备注**
## SQL 代码
### 查询语句
#### 查询 1[查询名称]
- **功能描述**
- **SQL 语句**
```sql
-- 查询1描述
SELECT t1.id, t1.name, t2.value
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.foreign_id
WHERE t1.name LIKE '%%' AND t2.value IS NOT NULL
ORDER BY t1.create_time DESC;
```
- **使用场景**
- **性能优化**
#### 查询 2[查询名称]
- **功能描述**
- **SQL 语句**
```sql
-- 查询2描述
```
- **使用场景**
- **性能优化**
### 存储过程
#### 存储过程 1[存储过程名称]
- **功能描述**
- **SQL 代码**
```sql
-- 存储过程1描述
DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT, OUT result INT)
BEGIN
-- 存储过程逻辑
SELECT COUNT(*) INTO result FROM table1 WHERE id > param1;
END //
DELIMITER ;
```
- **参数说明**
| 参数名 | 类型 | 方向 | 描述 |
| ------ | ---- | ---- | ---- |
| param1 | INT | IN | 输入参数 |
| result | INT | OUT | 输出参数 |
- **调用示例**
```sql
CALL procedure_name(100, @result);
SELECT @result;
```
### 触发器
#### 触发器 1[触发器名称]
- **功能描述**
- **SQL 代码**
```sql
-- 触发器1描述
DELIMITER //
CREATE TRIGGER trigger_name
AFTER INSERT ON table1
FOR EACH ROW
BEGIN
-- 触发器逻辑
INSERT INTO table2(foreign_id, value) VALUES(NEW.id, 'default_value');
END //
DELIMITER ;
```
- **触发条件**
- **执行逻辑**
### 视图
#### 视图 1[视图名称]
- **功能描述**
- **SQL 代码**
```sql
-- 视图1描述
CREATE VIEW view_name AS
SELECT t1.id, t1.name, t2.value
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.foreign_id;
```
- **使用场景**
## 使用示例
### 基本查询示例
```sql
-- 基本查询示例
SELECT * FROM table1 WHERE name = 'example';
```
### 复杂查询示例
```sql
-- 复杂查询示例
```
### 存储过程调用示例
```sql
-- 存储过程调用示例
```
## 优化建议
### 索引优化
- 建议1
- 建议2
### 查询优化
- 建议1
- 建议2
### 性能监控
- 监控指标:
- 监控工具:
## 维护指南
### 备份策略
- 备份频率:
- 备份方式:
- 备份存储位置:
### 恢复流程
- 恢复步骤:
- 验证方法:
### 更新流程
- 更新步骤:
- 测试方法:
- 回滚方案:
### 常见问题
| 问题 | 解决方案 |
| ---- | ------ |
| 问题1 | 解决方案1 |
| 问题2 | 解决方案2 |
## 变更历史
| 版本 | 日期 | 变更内容 | 变更人 |
| ---- | ---- | ------ | ------ |
| 1.0.0 | YYYY-MM-DD | 初始版本 | |
| 1.1.0 | YYYY-MM-DD | 添加新表 | |
## 相关文档
- [需求文档](../requirements/YYYY-MM-DD-00X-需求名.md)
- [设计文档](../design/YYYY-MM-DD-00X-设计名.md)