java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MybatisPlus时间处理

MybatisPlus之时间处理问题

作者: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级别(数据库设置)

官方解释:

将Default Expression设置为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;
    }

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

总结

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

您可能感兴趣的文章:
阅读全文