MybatisPlus之時間處理問題
MybatisPlus時間處理
建表
阿里巴巴編碼規(guī)約中建議命名為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 '創(chuàng)建時間',
create_time datetime null comment '更新時間'
);方式一:SQL級別(數(shù)據(jù)庫設(shè)置)
- create_time:

- update_time:

官方解釋:
- 此函數(shù)返回當前數(shù)據(jù)庫系統(tǒng)時間戳,返回值的類型為 datetime,并且不含數(shù)據(jù)庫時區(qū)偏移量。
- CURRENT_TIMESTAMP 從運行 SQL Server 實例的計算機的操作系統(tǒng)中獲得此值
將Default Expression設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進行插入、創(chuàng)建一條數(shù)據(jù)時給定一個默認值。
- 將On Update設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進行更新數(shù)據(jù)時會按照CURRENT_TIMESTAMP的規(guī)定更新你的值。(相當于實現(xiàn)了操作后時間的自動更新)
方式二:代碼級別(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;官方描述:
- 描述:表名注解,標識實體類對應(yīng)的表
- 使用位置:實體類

寫完@TableField后可以去配置一個handler我們這里取名為MyMetaObjectHandler;
實現(xiàn)元對象處理器接口: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 元對象參數(shù)
*/
default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject) {
if (Objects.nonNull(fieldVal) && metaObject.hasSetter(fieldName)) {
metaObject.setValue(fieldName, fieldVal);
}
return this;
}根據(jù)自己理解判斷該怎么用;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入理解springMVC中的Model和Session屬性
這篇文章主要介紹了深入理解springMVC中的Model和Session屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
java父子線程之間實現(xiàn)共享傳遞數(shù)據(jù)
本文介紹了Java中父子線程間共享傳遞數(shù)據(jù)的幾種方法,包括ThreadLocal變量、并發(fā)集合和內(nèi)存隊列或消息隊列,并提醒注意并發(fā)安全問題2025-02-02
idea中service或者mapper引入報紅的問題及解決
在使用IntelliJ IDEA開發(fā)SpringBoot項目時,有時會遇到Service或Mapper接口引入時報紅但不影響項目運行的情況,這主要是因為IDEA的檢查級別設(shè)置問題,解決方法是將有問題的Error級別改為編譯通過的安全級別,即可消除報紅2024-09-09

