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;
}根据自己理解判断该怎么用;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论