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

4.4 KiB
Raw Permalink Blame History

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 语句
    -- 查询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 语句
    -- 查询2描述
    
  • 使用场景
  • 性能优化

存储过程

存储过程 1[存储过程名称]

  • 功能描述
  • 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 输出参数
  • 调用示例
    CALL procedure_name(100, @result);
    SELECT @result;
    

触发器

触发器 1[触发器名称]

  • 功能描述
  • 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 代码
    -- 视图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;
    
  • 使用场景

使用示例

基本查询示例

-- 基本查询示例
SELECT * FROM table1 WHERE name = 'example';

复杂查询示例

-- 复杂查询示例

存储过程调用示例

-- 存储过程调用示例

优化建议

索引优化

  • 建议1
  • 建议2

查询优化

  • 建议1
  • 建议2

性能监控

  • 监控指标:
  • 监控工具:

维护指南

备份策略

  • 备份频率:
  • 备份方式:
  • 备份存储位置:

恢复流程

  • 恢复步骤:
  • 验证方法:

更新流程

  • 更新步骤:
  • 测试方法:
  • 回滚方案:

常见问题

问题 解决方案
问题1 解决方案1
问题2 解决方案2

变更历史

版本 日期 变更内容 变更人
1.0.0 YYYY-MM-DD 初始版本
1.1.0 YYYY-MM-DD 添加新表

相关文档