MyBatisPlus中使用 @TableField完成字段自动填充

场景

官方文档:

字段注解 @TableField

  • com.baomidou.mybatisplus.annotations.TableField

 

描述
value 字段值(驼峰命名方式,该值可无)
update 预处理 set 字段自定义注入
condition 预处理 WHERE 实体条件自定义运算规则
el 详看注释说明
exist 是否为数据库表字段( 默认 true 存在,false 不存在 )
strategy 字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )
fill 字段填充标记 ( FieldFill, 配合自动填充使用 )

 

  • 字段填充策略 FieldFill

 

描述
DEFAULT 默认不处理
INSERT 插入填充字段
UPDATE 更新填充字段
INSERT_UPDATE 插入和更新填充字段

实现

实体类中有如下属性,通过上面的自动填充属性,我们可以实现

在进行插入操作时对

添加了注解@TableField(fill = FieldFill.INSERT)

的字段进行自动填充。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)

的字段在进行插入和更新时进行自动填充。

 /**
     * 创建人
     */
    @TableField(fill = FieldFill.INSERT)
    private Long creatorId;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreat;

    /**
     * 修改人
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long modifierId;

    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;

    /**
     * 是否可用
     */
    @TableField(fill = FieldFill.INSERT)
    private Boolean availableFlag;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置?

在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler

并重写其方法:

package com.ws.api.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 自动填充处理类
 * @author badao
 * @version 1.0
 * @see
 **/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {


    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("modifierId", new Long(111), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
        this.setFieldValByName("creatorId", new Long(111), metaObject);
        this.setFieldValByName("gmtCreat",new Date(), metaObject);
        this.setFieldValByName("availableFlag",true, metaObject);
      

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("modifierId", new Long(111), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
}

其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。

上一篇:34个回答勾画人工智能面临的对抗性挑战,Ian Goodfellow与Alexey Kurakin的8小时问答活动


下一篇:【题解】「MtOI2019」手牵手走向明天 [*hard]