mybatis-plus填充时间

数据库新建两个时间字段

 Blog实体类(部分属性)

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("kss_blog")
public class Blog implements java.io.Serializable {
    // 主键
    @TableId(type = IdType.AUTO)
    private Integer id;
    // 内容标题
    private String title;
    //内容描述
    private String description;
    // 分类id
    private Integer categoryId;
    // 分类名称
    private String categoryTitle;
     // 创建时间
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    // 更新时间
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

创建MeatObjectHandler类

方式一:当实体类创建时间和修改时间的修饰符为Date,就使用下面这个配置类

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.setFieldValByName("create_time", new Date(), metaObject);
        this.setFieldValByName("update_time", new Date(), 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("update_time", new Date(), metaObject)
        //this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}
方式二:当实体类创建时间和修改时间的修饰符为LocalDateTime就使用下面这个配置类

实体类属性:

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    // 更新时间
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

配置类(根据自己的版本号自己选择)

/**
 * @Auther: liang
 * @Date: 2021/11/24 20:00
 * @Description:
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
//        this.setFieldValByName("createTime", new Date(), metaObject);
//        this.setFieldValByName("updateTime", new Date(), metaObject);


    //    this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        // 或者
        this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
        this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
        // 或者
//        this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
     //   this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
        // 或者
        this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
        // 或者
     //   this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
    }
}

如果时间的修饰符和配置类用错,就会报一下错误:

2021-11-24 21:25:56.003 ERROR 41244 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in 
context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException:

Could not set property 'createTime' of 'class com.neutech.ksswebproject.eneity.Blog'
 with value 'Wed Nov 24 21:25:56 CST 2021' Cause: java.lang.IllegalArgumentException: argument type mismatch] with root cause

这是因为date和localdate不同修饰符修饰创建时间和修改时间的问题。

以上内容属于个人笔记整理,如有错误,欢迎批评指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要关闭mybatis-plus的自动填充时间功能,你可以在mybatis-plus的全局配置中将MetaObjectHandler设置为null。在你的MybatisPlusConfig类中,将globalConfig.setMetaObjectHandler(new MetaHandler())改为globalConfig.setMetaObjectHandler(null)即可。这样设置后,mybatis-plus将不再自动填充时间字段。\[3\] #### 引用[.reference_title] - *1* [MyBatis-plus自动填充功能之自动填充时间](https://blog.csdn.net/Summer_And_Opencv/article/details/126320509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JavaMybatis-Plus自动填充功能配置和使用](https://blog.csdn.net/mouday/article/details/131005315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mybatis-plus自动填充失效](https://blog.csdn.net/qq_56700112/article/details/131250304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值