有時我們希望在更新數據的時候,自動完成某些字段的值的填充,如創建一個實體的時候,自動生成創建時間,更新的時候自動改變更新時間等。
- 在指定字段標注注解,生成器策略部分也可以配置。
// 創建時間
@TableField(fill = FieldFill.INSERT)
private Date createTime;
// 更新時間
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
public enum FieldFill {
/**
* 默認不處理
*/
DEFAULT,
/**
* 插入填充字段
*/
INSERT,
/**
* 更新填充字段
*/
UPDATE,
/**
* 插入和更新填充字段
*/
INSERT_UPDATE
}
- 實現元對象處理接口:
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
// fieldName 指的是實體類的屬性名,而不是數據庫的字段名
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(
metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(
metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(
// 起始版本 3.3.0(推薦)
metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
// 或者
this.strictUpdateFill(
// 起始版本 3.3.3(推薦)
metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
}
}