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;
    }

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aholic 冲冲冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值