MyBatisPlus
中使用 @TableField
完成字段自动填充功能。
一、字段填充策略 FieldFill
DEFAULT | 默认不处理 |
---|---|
INSERT | 插入填充字段 |
UPDATE | 更新填充字段 |
INSERT_UPDATE | 插入和更新填充字段 |
二、自动填充拦截器 MetaObjectHandler
MetaObjectHandler 是 MyBatis 提供的一个用于操作对象属性的接口,它可以让你无需编写 getter 和 setter 方法就能操作对象的属性。
import org.apache.ibatis.reflection.MetaObject;
@Component
public class ExampleMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 实现插入时的字段自动填充逻辑
this.strictInsertFill(metaObject, "fieldName", Date.class, new Date(), FieldFill.INSERT);
}
@Override
public void updateFill(MetaObject metaObject) {
// 实现更新时的字段自动填充逻辑
this.strictUpdateFill(metaObject, "fieldName", Date.class, new Date(), FieldFill.UPDATE);
}
}
三、实际用法
1.实体类代码
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
/**
* 修改人id
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updater;
2.拦截器代码
@Component
public class FieldMetaObjectHandler implements MetaObjectHandler {
private final static String UPDATE_DATE = "updateDate";
private final static String UPDATER = "updater";
@Override
public void insertFill(MetaObject metaObject) {
UserDetail user = SecurityUser.getUser();
Date date = new Date();
//修改人
strictInsertFill(metaObject, UPDATER, Long.class, user.getId());
//修改时间
strictInsertFill(metaObject, UPDATE_DATE, Date.class, date);
}
@Override
public void updateFill(MetaObject metaObject) {
//修改人
strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId());
//修改时间
strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date());
}
当你执行插入或更新操作时,MetaObjectHandler
会自动填充 updater和 updateDate
字段。