# ORM 实体类重构 - 2026-03-13 > 本文档记录两次 ORM 实体类重构: > 1. **表名规范化** - 统一表名与实体类名 > 2. **BaseEntity 继承** - 消除重复字段 --- ## 二、BaseEntity 继承重构 ### 重构背景 项目中所有 40 个实体类都包含重复的公共字段(`id`, `createdAt`, `updatedAt`, `deleted`),需要统一继承 `BaseEntity` 基类来减少重复代码。 ### BaseEntity 定义 ```java @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 | ### 修改模式 每个实体类按照以下模式修改: 1. **添加 `extends BaseEntity`** 到类声明 2. **添加 `@EqualsAndHashCode(callSuper = true)`** 注解 3. **移除重复字段**: - `Long id`(带 `@TableId` 注解) - `LocalDateTime createdAt`(带 `@TableField(fill = FieldFill.INSERT)`) - `LocalDateTime updatedAt`(带 `@TableField(fill = FieldFill.INSERT_UPDATE)`) - `Integer deleted`(带 `@TableLogic`) - `String createBy` 和 `String updateBy`(如果存在) 4. **清理 import**: - 移除 `import com.baomidou.mybatisplus.annotation.*;` - 只保留实际使用的注解 import - 添加 `import lombok.EqualsAndHashCode;` - 移除不再使用的 `import java.time.LocalDateTime;` ### 验证结果 ```bash export JAVA_HOME="/f/Java/jdk-17" mvn clean compile -DskipTests ``` **编译结果**: ✅ BUILD SUCCESS **警告说明**: MapStruct 提示部分字段未映射(如 `createBy`, `updateBy` 等),这些警告不影响运行,是因为 BaseEntity 新增的字段在 DTO 映射时需要显式处理。 ### 数据库迁移脚本 创建了 3 个 Flyway 迁移脚本: 1. **V20260313__rename_tables_to_singular.sql** - 表名规范化(复数改单数) 2. **V20260313_2__add_audit_fields.sql** - 为所有表添加审计字段(create_by, update_by) 3. **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) --- ## 一、表名规范化重构