公共映射与框架边界
公共框架决定“实体字段怎样变成查询与写入”,但并不因此拥有各业务表。理解这些规则,有助于区分正常的框架行为和真正的结构缺口。
审计字段、逻辑删除与租户
BaseDO 提供 createTime、updateTime、creator、updater、deleted。时间和操作者由字段填充处理器参与写入;deleted 使用 @TableLogic。这些 Java 声明不能证明数据库列具有相同默认值或非空约束,物理属性须逐表查字典。
TenantBaseDO 在此基础上增加 tenantId。只继承 BaseDO 的实体没有自动继承 Java 属性 tenantId,但测试数据库可能仍有 tenant_id,且租户拦截器可以独立参与 SQL。不能单凭实体未声明租户字段,断言表不受租户控制。
逻辑删除通常保留原有行。唯一索引若不含删除状态,删除后原编码仍可能被占用;例如 report 数据源编码的租户内唯一键。业务文档会说明这种约束对后续重建的影响,不自动修改索引。
证据:ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java:28;yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantBaseDO.java:15(后者相对 yudao-framework/)。
字段命名与动态对象
@TableName、@TableField、Mapper 显式 SQL 和动态数据源共同决定访问对象,不能只按 Java 类名生成数据库设计。@TableField(exist = false)表示辅助属性,不应列成 MySQL 持久列。TDengine 的tbname等特殊投影,也要与普通物理列区分。- 公共 MyBatis 配置使用线程上下文后缀和配置白名单改写表名。后缀由调用方设置,不能由示例注释推导实际月表名称。
- ES 嵌套对象、multi-field 和按月索引应从 mapping 与调用处对照;不能将 Java
String简化为一个统一的 ES 字符串类型。
证据:ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java:36,65。
网关与公共基础设施
本次针对 gateway 和 framework 的持久化注解检索,未发现独立业务 MySQL/ES 实体;网关 Nacos 文件未定义本次采集的数据源绑定。因此不创建一个假 想的“网关数据库”。网关令牌校验请求 system 的校验接口,并使用本地缓存;认证数据归 system 业务说明。
网关 RedisConfig 中自定义缓存管理器方法的 @Bean、@Primary 已被注释,不能把这个方法直接写成已经生效的运行事实。公共 Redis、租户、日志等能力按实际调用方与业务归属说明,未扫描线上 Redis key/value。
证据:ik_project/yudao-cloud/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/security/TokenAuthenticationFilter.java:64,135;config/RedisConfig.java:32(相对同一 gateway Java 包);doc/数据库设计管理/nacos/gateway-server.yaml。
证据等级
| 标记 | 含义 | 不能据此断言 |
|---|---|---|
| 实测结构 | 本次连接得到的数据库目录、字段、索引、mapping | 业务流程已成功运行、生产环境结构相同 |
| 源码确认 | 当前检出中的映射、SQL、服务调用、事件处理 | 线上部署了同一版本或配置分支正在启用 |
| 配置引用 | 用户提供的 Nacos 文件包含绑定 | 正在运行的进程实际加载了该配置 |
| 逻辑关联 | 业务代码使用 ID、标识或消息建立关系 | 数据库存在外键或跨系统事务 |
| 未确认归属 | 实库对象存在,但当前模块未发现对应持久化证据 | 对象已废弃、可以删除或归属于同名服务 |