07_通过 MyBatis-Plus 自动填充记录的创建时间和更新时间
在使用 MyBatis-Plus 进行数据库操作时,自动填充字段(如创建时间和更新时间)是一项非常常见的需求。本文将展示如何通过 MyBatis-Plus 实现对 createTime
和 updateTime
字段的自动填充。
1. 定义 DO 类
首先,我们需要在 DO(数据对象)类中定义 createTime
和 updateTime
字段,并通过注解指定其自动填充策略。
java
@Data
public class BaseDO {
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
在上面的代码中:
@TableField
注解用来指定字段对应的数据库列名和自动填充策略。FieldFill.INSERT
表示在插入数据时自动填充该字段。FieldFill.INSERT_UPDATE
表示在插入和更新数据时都自动填充该字段。
2. MyBatis-Plus 自动填充配置类
接下来,我们需要配置 MyBatis-Plus 的自动填充功能,这需要实现 MetaObjectHandler
接口,并重写 insertFill
和 updateFill
方法。
java
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
/**
* MyBatis-Plus 自动填充配置类。
*/
@Configuration
public class MyBatisPlusConfig implements MetaObjectHandler {
/**
* 配置 MyBatis-Plus 插件,包括分页插件。
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页插件,支持 MySQL 数据库
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
/**
* 插入时自动填充创建时间和更新时间。
*/
@Override
public void insertFill(MetaObject metaObject) {
LocalDateTime now = LocalDateTime.now();
// 严格插入时填充字段
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, now);
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, now);
}
/**
* 更新时自动填充更新时间。
*/
@Override
public void updateFill(MetaObject metaObject) {
// 严格更新时填充更新时间
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
在配置类中:
insertFill
方法会在插入数据时自动填充createTime
和updateTime
字段。updateFill
方法会在更新数据时自动填充updateTime
字段。