MybatisPlus之时间处理问题

 更新时间:2024年09月22日 10:47:42   作者:Aholic 冲冲冲  
在数据库设计时,阿里巴巴编码规约建议使用gmt_create和gmt_modified命名时间字段,并设置为datetime类型,本文介绍了两种自动填充时间字段的实现方式:SQL级别和代码级别(使用MyBatis Plus),SQL级别通过设置默认值和更新值为CURRENT_TIMESTAMP

MybatisPlus时间处理

建表

阿里巴巴编码规约中建议命名为gmt_create,gmt_modifie,并且类型datetime,我们这里用create_time create_time。

-- auto-generated definition
create table user
(
    id          bigint auto_increment comment '主键ID'
        primary key,
    name        varchar(30)                        null comment '姓名',
    age         int                                null comment '年龄',
    email       varchar(50)                        null comment '邮箱',
    create_time datetime  null comment '创建时间',
    create_time datetime  null comment '更新时间'
);

方式一:SQL级别(数据库设置)

  • create_time:

  • update_time:

官方解释:

  • 此函数返回当前数据库系统时间戳,返回值的类型为 datetime,并且不含数据库时区偏移量。
  • CURRENT_TIMESTAMP 从运行 SQL Server 实例的计算机的操作系统中获得此值

将Default Expression设置为CURRENT_TIMESTAMP的作用:

  • 在你进行插入、创建一条数据时给定一个默认值。
  • 将On Update设置为CURRENT_TIMESTAMP的作用:
  • 在你进行更新数据时会按照CURRENT_TIMESTAMP的规定更新你的值。(相当于实现了操作后时间的自动更新)

方式二:代码级别(mybatisplus自动填充)

Java中(springboot)

建一个pojo实体类:

package com.hyq.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)  //插入时更新
    private Date createTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)   //添加时更新  之后写策略
    private Date updateTime;


}

重点看时间的处理:

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)  //插入时更新
    private Date createTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)   //添加时更新  之后写策略
    private Date updateTime;

官方描述:

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类

写完@TableField后可以去配置一个handler我们这里取名为MyMetaObjectHandler;

实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

package com.hyq.handler;

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  //一定不要忘记把处理器加到io容器c中
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);
    }
    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start insert fill......");
        this.setFieldValByName("updateTime", new Date(), metaObject);

    }
}

这里的setFieldValByName源码如下:

    /**
     * 通用填充
     *
     * @param fieldName  java bean property name  字段名称
     * @param fieldVal   java bean property value 属性值
     * @param metaObject meta object parameter 元对象参数
     */
    default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
        if (Objects.nonNull(fieldVal) && metaObject.hasSetter(fieldName)) {
            metaObject.setValue(fieldName, fieldVal);
        }
        return this;
    }

根据自己理解判断该怎么用;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot+mybatis配置clickhouse实现插入查询功能

    springboot+mybatis配置clickhouse实现插入查询功能

    这篇文章主要介绍了springboot+mybatis配置clickhouse实现插入查询功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • IDEA自定义Maven archetype的方法步骤

    IDEA自定义Maven archetype的方法步骤

    在创建Maven的项目时我们发现了一个很不方便的问题,就是每次创建Maven的工程的时候,都需要选择一个骨架,本文主要介绍了IDEA自定义Maven archetype的方法步骤,感兴趣的可以了解一下
    2022-03-03
  • Java实现Json字符串与Object对象相互转换的方式总结

    Java实现Json字符串与Object对象相互转换的方式总结

    这篇文章主要介绍了Java实现Json字符串与Object对象相互转换的方式,结合实例形式总结分析了java基于Json-Lib、Org.Json、Jackson、Gson、FastJson五种方式转换json类型相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Java中创建线程的四种方式的最佳实践

    Java中创建线程的四种方式的最佳实践

    这篇文章主要为大家详细介绍了Java中创建线程的四种方式的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-08-08
  • 一篇文章带你了解mybatis的动态SQL

    一篇文章带你了解mybatis的动态SQL

    这篇文章主要为大家介绍了mybatis的动态SQL ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Java使用volatile关键字的注意事项

    Java使用volatile关键字的注意事项

    volatile关键字是Java中的一种稍弱的同步机制,为什么称之为弱机制。这篇文章主要介绍了Java使用volatile关键字的注意事项,需要的朋友可以参考下
    2017-02-02
  • Java非法字符: ‘\ufeff‘问题及说明

    Java非法字符: ‘\ufeff‘问题及说明

    这篇文章主要介绍了Java非法字符: ‘\ufeff‘问题及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java工具类Hutool、Guava与Apache Commons的区别详解

    Java工具类Hutool、Guava与Apache Commons的区别详解

    Hutool 和 Guava 都是 Java 开发中非常实用的工具库,它们提供了许多方便的工具类和方法,简化了常见的编程任务,这篇文章主要介绍了Java工具类Hutool、Guava与Apache Commons区别的相关资料,需要的朋友可以参考下
    2025-10-10
  • Java日期工具类时间校验实现

    Java日期工具类时间校验实现

    一般项目中需要对入参进行校验,比如必须是一个合法的日期,本文就来介绍一下Java日期工具类时间校验实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 解决springboot中@DynamicUpdate注解无效的问题

    解决springboot中@DynamicUpdate注解无效的问题

    这篇文章主要介绍了解决springboot中@DynamicUpdate注解无效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07

最新评论