我们都是通过编码操作数据库,当我们完成某些业务时,会向数据库插入一条数据,或者修改数据库时,会有一些公共字段,例如(新增)修改时间或(新增)修改人。如果每次都手动去设置这些值是非常麻烦的。MyBatis Plus通过实现MetaObjectHandler接口重写insertFill、updateFill方法可以帮你摆脱烦恼。
MetaObjectHandler介绍
MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值。实现这个需求的方法不止一种,在sql层面也可以做到,在建表的时候也可以指定默认值。
1、编写MetaObjectHandler 实现类
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Object created = getFieldValByName("created", metaObject);
if (null == created) {
//字段为空,可以进行填充
setFieldValByName("created", new Date(), metaObject);
}
Object updated = getFieldValByName("updated", metaObject);
if (null == updated) {
//字段为空,可以进行填充
setFieldValByName("updated", new Date(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
//更新数据时,直接更新字段
setFieldValByName("updated", new Date(), metaObject);
}
}
2、实体类上添加注解@TableField,并注明填充逻辑
```java
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public abstract class BasePojo implements Serializable {
@TableField(fill = FieldFill.INSERT) //自动填充
private Date created;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated;
}