1. 在Person表中新增字段

ALTER TABLE person 
ADD COLUMN create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
ADD COLUMN update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
ADD COLUMN is_deleted tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除,1-已删除)';
  1. DEFAULT CURRENT_TIMESTAMP - 设置字段的默认值为当前时间

  2. ON UPDATE CURRENT_TIMESTAMP - 当记录更新时自动将该字段设置为当前时间

  3. 插入新记录时

    • 如果你没有显式指定 update_time 的值

    • 数据库会自动将 update_time 设置为插入时的当前时间(因为 DEFAULT CURRENT_TIMESTAMP

  4. 更新记录时

    • 无论你是否显式修改 update_time 字段

    • 数据库都会自动将 update_time 更新为操作时的当前时间(因为 ON UPDATE CURRENT_TIMESTAMP

  5. 与 MyBatis-Plus 配合

    • 即使数据库有自动更新,也建议保留 MyBatis-Plus 的 @TableField(fill = FieldFill.INSERT_UPDATE)

    • 这样可以保证应用层和数据库层双重保障

2、实体类修改

@Data
@TableName("T_PERSON")
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable {
    @TableId(value = "PERSON_ID", type = IdType.AUTO)
    private Integer personId;
    @TableField("PERSON_NAME")
    private String personName;
    @TableField("PERSON_AGE")
    private Integer personAge;
    @TableField("PERSON_CITY")
    private String personCity;

    @TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(value = "UPDATE_TIME", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @TableField("IS_DELETED")
    @TableLogic
    private Integer isDeleted;
}

3、MyBatis-Plus配置

3.1. 配置自动填充处理器

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
    }
    
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }
}
  • 自动填充处理器用于在插入(INSERT)更新(UPDATE)操作时,自动为指定字段填充值,无需手动设置。

3.2. 配置逻辑删除(application.yml)

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: isDeleted  # 全局逻辑删除字段
      logic-not-delete-value: 0      # 未删除值
      logic-delete-value: 1          # 已删除值
  • 删除操作DELETE FROM user WHERE id=1 → UPDATE user SET is_deleted=1 WHERE id=1

  • 查询操作:自动附加条件 WHERE is_deleted=0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐