- 添加 target/ 到 .gitignore - 从 git 暂存区移除已追踪的 target 目录 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.0 KiB
7.0 KiB
ORM 实体类重构 - 2026-03-13
本文档记录两次 ORM 实体类重构:
- 表名规范化 - 统一表名与实体类名
- BaseEntity 继承 - 消除重复字段
二、BaseEntity 继承重构
重构背景
项目中所有 40 个实体类都包含重复的公共字段(id, createdAt, updatedAt, deleted),需要统一继承 BaseEntity 基类来减少重复代码。
BaseEntity 定义
@Data
public abstract class BaseEntity {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@CreatedBy
@TableField(fill = FieldFill.INSERT)
private String createBy;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdAt;
@LastModifiedBy
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedAt;
@TableLogic
@JsonIgnore
private Integer deleted;
}
实体类状态分析
| 状态 | 实体类数量 | 公共字段情况 | 操作 |
|---|---|---|---|
| A | 37 个 | 完整字段(id, createdAt, updatedAt, deleted) | extends BaseEntity + 移除 4 字段 |
| B | 2 个 | 缺 deleted(CoursePackage, Theme) | extends BaseEntity + 移除 3 字段 |
| C | 1 个 | 缺 updatedAt, deleted(StudentClassHistory) | extends BaseEntity + 移除 2 字段 |
修改的实体类清单
状态 B:缺少 deleted 字段(2 个)
| 序号 | 实体类 | 修改内容 |
|---|---|---|
| 1 | CoursePackage | 添加 extends BaseEntity,移除 id/createdAt/updatedAt |
| 2 | Theme | 添加 extends BaseEntity,移除 id/createdAt/updatedAt |
状态 C:缺少 updatedAt 和 deleted(1 个)
| 序号 | 实体类 | 修改内容 |
|---|---|---|
| 1 | StudentClassHistory | 添加 extends BaseEntity,移除 id/createdAt/deleted |
状态 A:完整字段(37 个)
| 序号 | 实体类 | 修改内容 |
|---|---|---|
| 1 | AdminUser | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 2 | Clazz | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 3 | ClassTeacher | 添加 extends BaseEntity,移除 id/createdAt/deleted(缺 updatedAt) |
| 4 | Course | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted/createdBy |
| 5 | CourseActivity | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 6 | CourseLesson | 添加 extends BaseEntity,移除 id/createdAt/updatedAt |
| 7 | CoursePackageCourse | 添加 extends BaseEntity,移除 id |
| 8 | CourseResource | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 9 | CourseScript | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 10 | CourseScriptPage | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 11 | CourseVersion | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 12 | GrowthRecord | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 13 | Lesson | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 14 | LessonFeedback | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 15 | LessonStep | 添加 extends BaseEntity,移除 id/createdAt/updatedAt |
| 16 | LessonStepResource | 添加 extends BaseEntity,移除 id/createdAt/updatedAt |
| 17 | Notification | 添加 extends BaseEntity,移除 id/createdAt/deleted |
| 18 | OperationLog | 添加 extends BaseEntity,移除 id/createdAt |
| 19 | Parent | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 20 | ParentStudent | 添加 extends BaseEntity,移除 id/createdAt/deleted |
| 21 | ResourceItem | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted/createdBy/updatedBy |
| 22 | ResourceLibrary | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted/createdBy/updatedBy |
| 23 | SchedulePlan | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 24 | ScheduleTemplate | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 25 | Student | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 26 | StudentRecord | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 27 | SystemSetting | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 28 | Tag | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 29 | Task | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 30 | TaskCompletion | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 31 | TaskTarget | 添加 extends BaseEntity,移除 id/createdAt/deleted |
| 32 | TaskTemplate | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 33 | Teacher | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 34 | Tenant | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 35 | TenantCourse | 添加 extends BaseEntity,移除 id/createdAt/updatedAt/deleted |
| 36 | TenantPackage | 添加 extends BaseEntity,移除 id/createdAt/updatedAt |
修改模式
每个实体类按照以下模式修改:
- 添加
extends BaseEntity到类声明 - 添加
@EqualsAndHashCode(callSuper = true)注解 - 移除重复字段:
Long id(带@TableId注解)LocalDateTime createdAt(带@TableField(fill = FieldFill.INSERT))LocalDateTime updatedAt(带@TableField(fill = FieldFill.INSERT_UPDATE))Integer deleted(带@TableLogic)String createBy和String updateBy(如果存在)
- 清理 import:
- 移除
import com.baomidou.mybatisplus.annotation.*; - 只保留实际使用的注解 import
- 添加
import lombok.EqualsAndHashCode; - 移除不再使用的
import java.time.LocalDateTime;
- 移除
验证结果
export JAVA_HOME="/f/Java/jdk-17"
mvn clean compile -DskipTests
编译结果: ✅ BUILD SUCCESS
警告说明: MapStruct 提示部分字段未映射(如 createBy, updateBy 等),这些警告不影响运行,是因为 BaseEntity 新增的字段在 DTO 映射时需要显式处理。
数据库迁移脚本
创建了 3 个 Flyway 迁移脚本:
- V20260313__rename_tables_to_singular.sql - 表名规范化(复数改单数)
- V20260313_2__add_audit_fields.sql - 为所有表添加审计字段(create_by, update_by)
- V20260313_3__fix_missing_tables.sql - 修复缺失的表(创建所有未创建的表)
V20260313_2__add_audit_fields.sql 说明:
- 为 39 个表添加了
create_by和update_by字段 - 为部分表补充了缺失的
deleted、created_at、updated_at字段 - 确保数据库表结构与 BaseEntity 实体类保持一致
V20260313_3__fix_missing_tables.sql 说明:
- 创建 V1 和 V20260313 迁移中缺失的所有基础表
- 包含所有 39 个实体类对应的数据库表
- 自动包含所有必要的字段和索引
- 插入默认超级管理员账号(admin/123456)