MybatisPlus之時(shí)間處理問(wèn)題
MybatisPlus時(shí)間處理
建表
阿里巴巴編碼規(guī)約中建議命名為gmt_create,gmt_modifie,并且類(lèi)型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)建時(shí)間',
create_time datetime null comment '更新時(shí)間'
);方式一:SQL級(jí)別(數(shù)據(jù)庫(kù)設(shè)置)
- create_time:

- update_time:

官方解釋:
- 此函數(shù)返回當(dāng)前數(shù)據(jù)庫(kù)系統(tǒng)時(shí)間戳,返回值的類(lèi)型為 datetime,并且不含數(shù)據(jù)庫(kù)時(shí)區(qū)偏移量。
- CURRENT_TIMESTAMP 從運(yùn)行 SQL Server 實(shí)例的計(jì)算機(jī)的操作系統(tǒng)中獲得此值
將Default Expression設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進(jìn)行插入、創(chuàng)建一條數(shù)據(jù)時(shí)給定一個(gè)默認(rèn)值。
- 將On Update設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進(jìn)行更新數(shù)據(jù)時(shí)會(huì)按照CURRENT_TIMESTAMP的規(guī)定更新你的值。(相當(dāng)于實(shí)現(xiàn)了操作后時(shí)間的自動(dòng)更新)
方式二:代碼級(jí)別(mybatisplus自動(dòng)填充)
Java中(springboot)
建一個(gè)pojo實(shí)體類(lèi):
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) //插入時(shí)更新
private Date createTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT_UPDATE) //添加時(shí)更新 之后寫(xiě)策略
private Date updateTime;
}
重點(diǎn)看時(shí)間的處理:
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT) //插入時(shí)更新
private Date createTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT_UPDATE) //添加時(shí)更新 之后寫(xiě)策略
private Date updateTime;官方描述:
- 描述:表名注解,標(biāo)識(shí)實(shí)體類(lèi)對(duì)應(yīng)的表
- 使用位置:實(shí)體類(lèi)

寫(xiě)完@TableField后可以去配置一個(gè)handler我們這里取名為MyMetaObjectHandler;
實(shí)現(xiàn)元對(duì)象處理器接口: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 {
//插入時(shí)的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill......");
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
//更新時(shí)的填充策略
@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 元對(duì)象參數(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- mybatisplus實(shí)現(xiàn)自動(dòng)填充時(shí)間的項(xiàng)目實(shí)踐
- MybatisPlus創(chuàng)建時(shí)間不想用默認(rèn)值的問(wèn)題
- mybatisPlus實(shí)現(xiàn)邏輯刪除,自動(dòng)生成創(chuàng)建時(shí)間和更新時(shí)間方式
- MybatisPlus自動(dòng)填充創(chuàng)建(更新)時(shí)間問(wèn)題
- mybatisplus實(shí)現(xiàn)自動(dòng)創(chuàng)建/更新時(shí)間的項(xiàng)目實(shí)踐
- Mybatis-Plus如何實(shí)現(xiàn)時(shí)間日期的比較
相關(guān)文章
通過(guò)實(shí)例解析spring環(huán)繞通知原理及用法
這篇文章主要介紹了通過(guò)實(shí)例解析spring環(huán)繞通知原理及用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
深入理解springMVC中的Model和Session屬性
這篇文章主要介紹了深入理解springMVC中的Model和Session屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
java父子線程之間實(shí)現(xiàn)共享傳遞數(shù)據(jù)
本文介紹了Java中父子線程間共享傳遞數(shù)據(jù)的幾種方法,包括ThreadLocal變量、并發(fā)集合和內(nèi)存隊(duì)列或消息隊(duì)列,并提醒注意并發(fā)安全問(wèn)題2025-02-02
SpringBoot項(xiàng)目中使用redis緩存的方法步驟
本篇文章主要介紹了SpringBoot項(xiàng)目中使用redis緩存的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
idea中service或者mapper引入報(bào)紅的問(wèn)題及解決
在使用IntelliJ IDEA開(kāi)發(fā)SpringBoot項(xiàng)目時(shí),有時(shí)會(huì)遇到Service或Mapper接口引入時(shí)報(bào)紅但不影響項(xiàng)目運(yùn)行的情況,這主要是因?yàn)镮DEA的檢查級(jí)別設(shè)置問(wèn)題,解決方法是將有問(wèn)題的Error級(jí)別改為編譯通過(guò)的安全級(jí)別,即可消除報(bào)紅2024-09-09

