建表
阿里巴巴编码规约中建议命名为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;
}
根据自己理解判断该怎么用;