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 {@Overridepublic void insertFill(MetaObject metaObject) {// 实现插入时的字段自动填充逻辑this.strictInsertFill(metaObject, "fieldName", Date.class, new Date(), FieldFill.INSERT);}@Overridepublic 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";
@Overridepublic 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);}
@Overridepublic void updateFill(MetaObject metaObject) {//修改人strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId());//修改时间strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date());}
当你执行插入或更新操作时,MetaObjectHandler
会自动填充 updater和 updateDate
字段。