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ù)返回當(dāng)前數(shù)據(jù)庫系統(tǒng)時間戳,返回值的類型為 datetime,并且不含數(shù)據(jù)庫時區(qū)偏移量。
- CURRENT_TIMESTAMP 從運行 SQL Server 實例的計算機(jī)的操作系統(tǒng)中獲得此值
將Default Expression設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進(jìn)行插入、創(chuàng)建一條數(shù)據(jù)時給定一個默認(rèn)值。
- 將On Update設(shè)置為CURRENT_TIMESTAMP的作用:
- 在你進(jìn)行更新數(shù)據(jù)時會按照CURRENT_TIMESTAMP的規(guī)定更新你的值。(相當(dāng)于實現(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;
官方描述:
- 描述:表名注解,標(biāo)識實體類對應(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-12java父子線程之間實現(xiàn)共享傳遞數(shù)據(jù)
本文介紹了Java中父子線程間共享傳遞數(shù)據(jù)的幾種方法,包括ThreadLocal變量、并發(fā)集合和內(nèi)存隊列或消息隊列,并提醒注意并發(fā)安全問題2025-02-02idea中service或者mapper引入報紅的問題及解決
在使用IntelliJ IDEA開發(fā)SpringBoot項目時,有時會遇到Service或Mapper接口引入時報紅但不影響項目運行的情況,這主要是因為IDEA的檢查級別設(shè)置問題,解決方法是將有問題的Error級別改為編譯通過的安全級別,即可消除報紅2024-09-09