2.0 KiB
2.0 KiB
项目规范
数据库迁移(Flyway Migration)
命名规则
- 脚本格式:
V{YYYYMMDD}_{序号}__{描述}.sql - 日期必须使用实际编写日期,不得使用过去的日期
- 序号从 1 开始,同一天多个脚本递增
- 描述使用下划线分隔的英文短语
核心原则
- 不可变性:已执行的迁移脚本永远不得修改
- 只增不减:数据库变更只能通过新增迁移脚本实现
- 向后兼容:新脚本应兼容已有数据
操作规范
- 删除表:创建新迁移脚本,使用
DROP TABLE IF EXISTS - 修改表结构:使用
ALTER TABLE语句 - 新增表:创建新迁移脚本,使用
CREATE TABLE
框架机制
行级数据隔离(多租户拦截器)
- 配置类:
MybatisPlusConfig注册TenantLineInnerInterceptor - 租户字段:
created_by(每个业务表的创建人字段) - 租户值来源:
StpUtil.getLoginIdAsString()(当前登录用户) - 自动注入: 所有 SELECT/UPDATE/DELETE 语句自动追加
WHERE created_by = #{当前用户} - 归属校验: 查询单条记录时拦截器自动校验
created_by,非本人数据直接返回空 - 排除表:
user、flyway_schema_history、databasechangelog、databasechangeloglock
自动填充(MetaObjectHandler)
- created_by / updated_by: 插入/更新时自动填充为当前登录用户
- created_time / updated_time: 插入/更新时自动填充当前时间
认证鉴权(Sa-Token)
- 会话管理: 基于
StpUtil的登录/登出/会话查询 - 权限校验:
@SaCheckPermission注解式权限控制 - 未登录处理: 全局异常处理器捕获
NotLoginException返回 401
编码规范
数据访问层
- 优先使用纯 MyBatis-Plus Java API(
Wrappers.<T>lambdaQuery()、selectList、selectById等),避免手写 XML SQL - 复杂查询通过
Wrappers链式构建条件,必要时使用.apply()拼接原生 SQL 片段