MyBatis-Plus 中可通过抽象类 BaseEntity 统一管理 id、createTime、updateTime、deleted 等公共字段,需为字段显式添加 @TableId、@TableField、@TableLogic 等注解,抽象类不加 @TableName,子类继承并标注 @TableName 即可自动识别继承字段。

在 MyBatis-Plus 中,通过抽象类定义通用的 BaseEntity 是常见做法,目的是统一管理如 id、createTime、updateTime、deleted 等公共字段,避免每个实体类重复写。关键在于:抽象类本身不参与数据库映射(不能被 MyBatis-Plus 当作实体扫描),但它的字段必须能被子类继承并正确识别为表字段。
抽象类设计要点:用 @TableName 和 @TableId 等注解修饰字段
MyBatis-Plus 会扫描子类的继承链,读取父类中带注解的字段。所以抽象类中的字段需显式加注解,不能只靠子类补注解。
- 抽象类本身不加
@TableName(否则会被误识别为实体) - 每个需要映射的字段(如
id、createTime)必须标注对应注解,例如@TableId、@TableField(fill = FieldFill.INSERT) - 推荐使用
protected修饰符,确保子类可继承且字段可被反射读取
配合自动填充实现创建/更新时间管理
通用时间字段(如 createTime、updateTime)建议结合 MyBatis-Plus 的自动填充功能,避免手动赋值出错。
- 在抽象类中定义字段并标注
@TableField(fill = FieldFill.INSERT)和@TableField(fill = FieldFill.INSERT_UPDATE) - 实现
MetaObjectHandler接口,重写insertFill和updateFill方法,统一设置时间值 - 注意:自动填充只对未 null 的字段生效,若字段类型是
LocalDateTime,确保数据库字段支持该类型(如 MySQL 5.6+ 的datetime)
逻辑删除字段要与全局配置对齐
如果使用逻辑删除(如 deleted 字段),抽象类中定义该字段后,还需同步配置 MyBatis-Plus 的全局逻辑删除规则。
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“Java免费学习笔记(深入)”;
- 抽象类中声明:
@TableLogic注解 + 对应字段(如private Integer deleted;) - 在
MybatisPlusConfig中配置GlobalConfig的dbConfig.setLogicDeleteField("deleted")和setLogicDeleteValue/setLogicNotDeleteValue - 确保子类继承后,查询、删除操作自动应用逻辑删除条件
子类只需继承 + 指定表名,无需重复定义通用字段
子类只需继承抽象基类,并用 @TableName 指定自身表名,其余字段自动继承并生效。
- 示例子类:
@TableName("sys_user") public class SysUser extends BaseEntity { private String username; ... } - MyBatis-Plus 在解析
SysUser时,会合并BaseEntity中所有带注解的字段 - 若子类需覆盖父类字段行为(如自定义主键策略),可在子类中重新声明并加注解,优先级高于父类








