自动填充功能
一般情况下,新建的数据库都有插入时间和修改时间字段,实现自动填充插入时间和更新时间的方式有两个
- 数据库层面
- 代码层面
数据库层面
修改表的结构
alter table user add create_time timestamp default current_timestamp;
alter table user add update_time timestamp default current_timestamp on update current_timestamp;
这样代码插入更新时不需要考虑创建时间和修改时间,数据库自动会填充和修改
代码层面
假设数据库表中有 create_time、update_time 字段,类型是 datatime,通过编写代码来插入和修改表中的时间字段
实现方法
-
实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
-
注解填充字段
@TableField(fill = FieldFill.INSERT)
生成器策略部分也可以配置!
@TableField
字段注解,其 fill 属性能设置自动填充策略
策略 | 描述 |
---|---|
DEFAULT | 默认不自动填充 |
INSERT | 插入时自动填充 |
UPDATE | 修改时自动填充 |
INSERT_UPDATE | 插入修改时自动填充 |
示例
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT )
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
实现元对象处理器接口
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.setFieldValByName("updateTime",new Date(),metaOject);
}
}
插入数据测试