上一节我们了解了Mybaits-plus组件的分页查询参数类; 这一节我们来了解一下@TableField注解的属性-FieldFill的用法;
@TableField的属性
TableField的属性有很多,常用的有value,exist,update,FieldStrategy,FieldFill等。
今天,先让我们来看看FieldFill属性;
FieldFill属性说明
- FieldFill属性的作用:
指定数据库表的字段的填充策略,即:当你进行插入或修改数据时,使用你自定义类的相关方法,为有这个注解属性的字段进行赋值;
- FieldFill属性的枚举值:
| 值 | 描述 |
|---|---|
| DEFAULT | 默认不处理 |
| INSERT | 插入时填充字段 |
| UPDATE | 更新时填充字段 |
| INSERT_UPDATE | 插入和更新时填充字段 |
FieldFill属性举例:
例如,我数据库中有这样两个字段,用于记录数据的插入时间和最新更新时间;
`create_time` datetime NOT NULL COMMENT '记录插入时间',
`update_time` datetime NOT NULL COMMENT '记录更新时间',
对应在DB类中的属性定义:
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
然后我们来自定义一个字段“填充类”
@Component
public class FillMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
这样我们在进行插入和修改操作时,create_time和update_time两个字段就可以自动填充为“当前时间”了;
//使用数据库的 "FieldFill"设置字段值
itStationService.save(new TStation().setId(100L).setNo("001"));
//使用数据库的 "FieldFill"更新字段值
itStationService.updateById(new TStation().setId(100L).setNo("002"));
我们可以查看一下数据库中的结果;
其实
对于本示例中,记录数据的插入和更新时间这样简单的填充策略,可以选择在定义数据库字段时,添加填充策略即可;
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录插入时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
但对于一些复杂的填充逻辑,比如要记录当前数据的操作人账号(从session或context中获取),这样的填充策略就比较适合使用fieldFill属性了;