mybatis-plus逻辑删、创建时间、修改时间基础知识补充
即使数据库有自动更新,也建议保留 MyBatis-Plus 的。- 当记录更新时自动将该字段设置为当前时间。这样可以保证应用层和数据库层双重保障。- 设置字段的默认值为当前时间。设置为插入时的当前时间(因为。更新为操作时的当前时间(因为。
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-已删除)';
-
DEFAULT CURRENT_TIMESTAMP
- 设置字段的默认值为当前时间 -
ON UPDATE CURRENT_TIMESTAMP
- 当记录更新时自动将该字段设置为当前时间 -
插入新记录时:
-
如果你没有显式指定
update_time
的值 -
数据库会自动将
update_time
设置为插入时的当前时间(因为DEFAULT CURRENT_TIMESTAMP
)
-
-
更新记录时:
-
无论你是否显式修改
update_time
字段 -
数据库都会自动将
update_time
更新为操作时的当前时间(因为ON UPDATE CURRENT_TIMESTAMP
)
-
-
与 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

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