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

本文详细介绍了MyBatisPlus框架中自动填充字段的功能,包括如何使用@TableField注解设置填充策略,如INSERT、UPDATE及INSERT_UPDATE,以及如何自定义填充处理器实现更复杂的填充逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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("code@qq.com");
    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
### MyBatis-Plus 自动填充 功能详解 #### 实现自动填充的关键组件 MyBatis-Plus 提供了 `MetaObjectHandler` 接口来实现字段的自动填充功能。通过继承该接口并重写相应的方法,可以在插入或更新操作时自动生成特定字段的值[^2]。 ```java import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", Date::new); // 插入时填充创建时间 this.strictInsertFill(metaObject, "createBy", () -> getUserId(), Long.class); // 填充创建者ID } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", Date::new); // 更新时填充修改时间 this.strictUpdateFill(metaObject, "updateBy", () -> getUserId(), Long.class); // 填充修改者ID } } ``` #### 字段配置方式 为了使某个字段能够被自动填充,在对应的实体类中需要使用 `@TableField` 注解,并指定 `fill` 属性为合适的枚举值(如 `FieldStrategy.NOT_NULL` 或其他策略)。这允许框架识别哪些字段应该参与自动填充逻辑[^3]。 ```java @TableField(fill = FieldFill.INSERT) private Date createTime; // 创建时间 @TableField(fill = FieldFill.UPDATE) private Date updateTime; // 修改时间 ``` #### 启用全局处理器 最后一步是在 Spring Boot 应用程序上下文中注册上述处理程序作为 Bean 组件,从而让整个应用程序都能享受到这一特性带来的便利[^1]。 ```yaml mybatis-plus: global-config: db-config: id-type: auto configuration: handlers: - my.package.MyMetaObjectHandler ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值