mybatis-plus的自动填充时间,@TableField 注解,

@TableField 注解

填充策略主要是告诉他我啥时候开始填充,
1。在实体类加上@TableField 注解,

//字段插入自动填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;
//字段更新自动填充
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

2.看看@TableField的源码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableField {
    String value() default "";

    boolean exist() default true;

    String condition() default "";

    String update() default "";

    FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;

    FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;

    FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;

    FieldFill fill() default FieldFill.DEFAULT;

    boolean select() default true;

    boolean keepGlobalFormat() default false;

    JdbcType jdbcType() default JdbcType.UNDEFINED;

    Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

    String numericScale() default "";
}

其中的FieldFill 就是填充的策略,默认 FieldFill.DEFAULT,不填充

public enum FieldFill {
    DEFAULT,
    INSERT,
    UPDATE,
    INSERT_UPDATE;

    private FieldFill() {
    }
}

DEFAULT, 默认,不填充
INSERT, 插入时填充
UPDATE, 更新时填充
INSERT_UPDATE; 插入更新都填充
3。要写处理器handler,去告诉到底填充那几个字段

@Slf4j
@Component//记得加到容器
public class MybatisObjectHandler implements MetaObjectHandler {

    //插入时的填充出的略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("star insert fill...");
        //setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
//更新时填充
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("star update fill...");
        //setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

this.setFieldValByName(“createTime”,new Date(),metaObject);
createTime就是要填充的。

4.测试

@Test
public void insetTest(){
    User user=new User();
    user.setAge(19);
    user.setEmail("[email protected]");
    user.setName("mzh");

    int result=userMapper.insert(user);//自动生成id
    System.out.println("result"+result);
    System.out.println("user"+user);///id自动回填
}
JDBC Connection [HikariProxyConnection@1621615881 wrapping com.mysql.cj.jdbc.ConnectionImpl@2e13f304] will not be managed by Spring
==>  Preparing: INSERT INTO user ( name, age, email, create_time, update_time, version ) VALUES ( ?, ?, ?, ?, ?, ? ) 
==> Parameters: meng(String), 19(Integer), code@qq.com(String), 2020-06-19 08:44:17.474(Timestamp), 2020-06-19 08:44:17.474(Timestamp), 0(Integer)
<==    Updates: 1

猜你喜欢

转载自blog.csdn.net/code_mzh/article/details/106848859