MybatisPlus之時(shí)間處理問題
MybatisPlus時(shí)間處理
建表
阿里巴巴編碼規(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)建時(shí)間', create_time datetime null comment '更新時(shí)間' );
方式一:SQL級別(數(shù)據(jù)庫設(shè)置)
- create_time:
- update_time:
官方解釋:
- 此函數(shù)返回當(dāng)前數(shù)據(jù)庫系統(tǒng)時(shí)間戳,返回值的類型為 datetime,并且不含數(shù)據(jù)庫時(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í)給定一個默認(rèn)值。
- 將On Update設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進(jìn)行更新數(shù)據(jù)時(shí)會按照CURRENT_TIMESTAMP的規(guī)定更新你的值。(相當(dāng)于實(shí)現(xiàn)了操作后時(shí)間的自動更新)
方式二:代碼級別(mybatisplus自動填充)
Java中(springboot)
建一個pojo實(shí)體類:
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í)更新 之后寫策略 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í)更新 之后寫策略 private Date updateTime;
官方描述:
- 描述:表名注解,標(biāo)識實(shí)體類對應(yīng)的表
- 使用位置:實(shí)體類
寫完@TableField后可以去配置一個handler我們這里取名為MyMetaObjectHandler;
實(shí)現(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 { //插入時(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 元對象參數(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)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過實(shí)例解析spring環(huán)繞通知原理及用法
這篇文章主要介紹了通過實(shí)例解析spring環(huán)繞通知原理及用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10深入理解springMVC中的Model和Session屬性
這篇文章主要介紹了深入理解springMVC中的Model和Session屬性,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12java父子線程之間實(shí)現(xiàn)共享傳遞數(shù)據(jù)
本文介紹了Java中父子線程間共享傳遞數(shù)據(jù)的幾種方法,包括ThreadLocal變量、并發(fā)集合和內(nèi)存隊(duì)列或消息隊(duì)列,并提醒注意并發(fā)安全問題2025-02-02SpringBoot項(xiàng)目中使用redis緩存的方法步驟
本篇文章主要介紹了SpringBoot項(xiàng)目中使用redis緩存的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12idea中service或者mapper引入報(bào)紅的問題及解決
在使用IntelliJ IDEA開發(fā)SpringBoot項(xiàng)目時(shí),有時(shí)會遇到Service或Mapper接口引入時(shí)報(bào)紅但不影響項(xiàng)目運(yùn)行的情況,這主要是因?yàn)镮DEA的檢查級別設(shè)置問題,解決方法是將有問題的Error級別改為編譯通過的安全級別,即可消除報(bào)紅2024-09-09