使用情况
当我们的数据库表中有如下字段:created_at(插入数据时间),updated_at(更新数据时间)时, 我们希望可以实现自动填充。
具体使用
- 实体类(sql表字段)
public class TradingInfo {
@TableId(value = "order_id")
private String orderId;
@TableField(value = "buyer_uid")
private String buyerId;
@TableField(value = "seller_uid")
private String SellerId;
@TableField(value = "identity_hash")
private String identityHash;
@TableField(value = "created_at", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
FieldFill:是一个枚举, 主要为:
public enum FieldFill {
DEFAULT, // 默认状态,不处理
INSERT, // 仅在插入数据时更新
UPDATE, // 仅在更新数据时更新
INSERT_UPDATE; // 在插入数据和更新数据时更新
private FieldFill() {
}
}
- 自动填充策略(注意使用注解@Component)
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入数据自动填充时间
*
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
// 第一个参数fieldName对应实体类属性值
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
/**
* 更新数据自动更新时间
*
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
}