mybatisPlus自动填创建时间和修改时间

package com.example.demo.config;

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.util.Date;

@Slf4j
@Component // 一定不要忘记把处理器加到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {

    // 插入时候的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start 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("start update fill ...");
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

}
 /**
     *创建日期
     * @author lzc
     * @date 2021/6/1 14:08
     */
    @TableField( value = "crt_time",fill = FieldFill.INSERT)
    private Date createTime;


    /**
     *修改日期
     * @author lzc
     * @date 2021/6/1 14:08
     */
    @TableField(value = "upd_time",fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date updateTime;
### MyBatisPlus创建时间更新时间自动充机制 #### 项目环境配置 为了在 Spring Boot 项目中使用 MyBatis-Plus 实现自动时间字段,首先需要完成项目的依赖引入基础配置。确保 `pom.xml` 文件中包含了必要的依赖项[^1]。 ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> ``` 接着,在 `application.yml` 或者 `application.properties` 文件中配置数据库连接信息以及 MyBatis-Plus 的相关属性: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` #### 数据库表结构设计 当创建数据表时,建议预先定义好用于记录元数据的时间戳字段其他常用字段。这些字段不仅有助于追踪每条记录的历史变更情况,而且对于实现自动化管理非常有帮助[^2][^3]。 ```sql CREATE TABLE user ( id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', create_time DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (id) ); ``` #### 自动化处理逻辑设定 为了让 MyBatis-Plus 能够识别并执行针对特定列(如 `create_time`, `update_time`)的操作,需通过 Java Bean 注解的方式指定哪些字段应该参与自动化的插入或更新行为。具体来说,可以通过继承 `BaseMapper<T>` 接口来自定义实体类对应的 Mapper,并利用 `@TableField(fill = FieldFill.INSERT_UPDATE)` 来标记那些希望被自动维护的时间戳字段[^4]。 ```java import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.FieldFill; public class User { private Long id; private String name; private Integer age; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Date updateTime; } ``` 此外,还需要注册一个全局处理器来实际触发上述标注的作用——即每当发生新增或者编辑操作时都会调用此处理器去设置相应的时间值。这一步骤可通过扩展 `MetaObjectHandler` 类并重写其中的方法达成目的。 ```java @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } } ``` 这样就完成了整个流程的设计与编码工作,使得每次保存新对象或是更新已有对象时都能正确无误地同步最新的时间戳信息至数据库中去了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值