Mybatis-Plus公共字段自动填充(MetaObjectHandler接口)

        通常数据表中一般都有的字段,也就是公共字段,比如create_time,update_time,每次修改或插入新数据的时候都要设置一次值,操作很繁琐,所以mybatis-puls提供了公共字段填充这一个接口(MetaObjectHandler接口)。

Mybatis-Plus公共字段自动填充(MetaObjectHandler接口)_第1张图片

mybatis-plus填充公共字段步骤:

        1.新建类MyMetaObjecthandler(类名自定义),实现MetaObjectHandler接口。重写其中的insertFill和updateFill方法,加上@component注解让spring管理它。

package cn.pjh.reggie.common;

import cn.pjh.reggie.utils.BaseContext;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyMetaObjecthandler implements MetaObjectHandler {
    /**
     * 插入操作自动填充
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // metaObject.setValue第一个参数实体类属性名,第二个参数是需要设置的值
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", BaseContext.getCurrentId());
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
    }

    /**
     * 更新操作自动填充
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // metaObject.setValue第一个参数实体类属性名,第二个参数是需要设置的值
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
    }
}

2.在实体类上给公共字段加上@TableField(fill = FieldFill.INSERT),其中需要填写参数,参数也是mybatisplus提供好的,FieldFill是一个枚举类,其中枚举值就是需要的参数,如:

INSERT:插入时填充

UPDATE:修改时填充

INSERT_UPDATE:插入和修改时都填充

package cn.pjh.reggie.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 员工实体类
 */
@Data
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private String username;

    private String name;

    private String password;

    private String phone;

    private String sex;

    private String idNumber;

    private Integer status;

    @TableField(fill = FieldFill.INSERT) //插入时填充
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE) //插入和更新时都填充
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;

}

你可能感兴趣的:(Mybatis,mybatis)