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:
官方解釋?zhuān)?/strong>
- 此函數(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 字段名稱(chēng) * @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-12java父子線程之間實(shí)現(xiàn)共享傳遞數(shù)據(jù)
本文介紹了Java中父子線程間共享傳遞數(shù)據(jù)的幾種方法,包括ThreadLocal變量、并發(fā)集合和內(nèi)存隊(duì)列或消息隊(duì)列,并提醒注意并發(fā)安全問(wèn)題2025-02-02SpringBoot項(xiàng)目中使用redis緩存的方法步驟
本篇文章主要介紹了SpringBoot項(xiàng)目中使用redis緩存的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12idea中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