当前位置: 代码网 > it编程>编程语言>Java > MybatisPlus之时间处理问题

MybatisPlus之时间处理问题

2024年09月22日 Java 我要评论
mybatisplus时间处理建表阿里巴巴编码规约中建议命名为gmt_create,gmt_modifie,并且类型datetime,我们这里用create_time create_time。-- a

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com