48 lines
2.0 KiB
Markdown
48 lines
2.0 KiB
Markdown
# 项目规范
|
||
|
||
## 数据库迁移(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 片段
|