总结下MyBatisPlus中的一个注解@TableField
作用:
自动填充
问题场景:
在开发过程中,有多个实体类具有相同属性,这里举两个属性(createTime,updateTime),当我们更新数据库中的表时,会频繁去手动填写代码去更新。
解决方法:
第一步:
我们可以将这些属性提取出来,创建一个公共基础类BasePojo,代码如下
@Data
public abstract class BasePojo implements Serializable {
//自动填充
@TableField(fill = FieldFill.INSERT)
private Date created;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated;
}
这里@Data注解不懂的可以自行去查下,这里不解释。
@TableField注解可以帮我们解决这个手动去添加更新的问题。该注解有4个属性分别为:
DEFAULT : 默认不处理
INSERT : 插入填充字段
UPDATE : 更新填充字段
INSERT_UPDATE : 插入和更新填充字段
第二步:
既然说是自动赋值,那么自动赋值在哪里配置?
我们可以在自建的config目录下新建自动填充的处理类并实现MetaObjectHandler接口
代码如下:
@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);
}
}
其中第一个参数:前面自动填充的所对应的字段名称
第二个参数:要自动填充的值