MetaObjectHandler
参考【 https://baomidou.com/guides/auto-fill-field/】
在 MyBatis-Plus 中提供了一个便捷的自动填充功能。MetaObjectHandler 是一个用于处理实体对象的元对象的接口。它允许我们在插入、更新、删除等操作之前或之后,对实体对象进行自定义处理。通过 MetaObjectHandler,我们可以实现如自动填充创建时间、更新时间、删除标记等功能。
一、基操
1.1 实现 MetaObjectHandler接口
在上面的示例中,我们使用了 @Component 注解,确保MyMetaObjectHandler类被 Spring 管理。我们创建了一个名为MyMetaObjectHandler 的类,并实现了 MetaObjectHandler 接口。在insertFill方法中,我们自动填充了创建人和创建时间。在 updateFill方法中,我们自动更新数据库表中更新时间与更新人。
/**
* 通用字段处理器
*/
@Component
@Slf4j
public class CommonFieldHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
UserBean userBean = LoginUtil.get();
if (userBean != null) {
// 创建人ID
setFieldValByName("createUserId", LoginUtil.get().getId(), metaObject);
// 创建人名称
setFieldValByName("createUserName", LoginUtil.get().getName(), metaObject);
// 创建时间
setFieldValByName("createTime", new Date(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
UserBean userBean = LoginUtil.get();
if (userBean != null) {
// 更新人ID
setFieldValByName("updateUserId", LoginUtil.get().getId(), metaObject);
// 更新人名称
setFieldValByName("updateUserName", LoginUtil.get().getName(), metaObject);
// 更新时间
setFieldValByName("updateTime", new Date(), metaObject);
}
}
}
在上面的示例中,将 CommonFieldHandler 类交由 Spring IoC容器进行管理。在insertFill方法中,自动填充了创建人和创建时间。在 updateFill方法中,自动填充更新人与更新时间。
1.2 使用 MetaObjectHandler
在实体类中,通过 @TableFile(fill = FieldFill.INSERT)
添加创建人、创建时间,通过 @TableField(fill = FieldFill.UPDATE)
添加更新人、更新时间字段,如下:
@Data
public class BaseBean implements Serializable {
private static final long serialVersionUID = -63039799721058887L;
@ApiModelProperty(value = "id")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "创建人ID")
@TableField(fill = FieldFill.INSERT)
private Long createUserId;
@ApiModelProperty(value = "创建人名称")
@TableField(fill = FieldFill.INSERT)
private String createUserName;
@ApiModelProperty(value = "创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新人ID")
@TableField(fill = FieldFill.UPDATE)
private Long updateUserId;
@ApiModelProperty(value = "更新人名称")
@TableField(fill =