DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主鍵ID' auto_increment,
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年齡',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
create_time datetime ,
update_time datetime ,
PRIMARY KEY (id)
);
這是我的建表的sql,我沒有直接讓sql自動填充時間,我用的mybatisPlus自動填充
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@TableId(type=IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT )
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
這是我的物體類
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("開始創建時間欄位...");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("開始更新時間欄位...");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
這種自動填充,完全沒問題,而且入庫了,自動填充了時間
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推薦使用)
這種是官網提供的,我用了,然后插入一個新資料,更新和創建時間為null(沒成功)
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
這是我試著把官網提供的LocalDateTime改成Date,結果成功了,LocalDateTime是jdk8提供的一種時間格式,這個我知道,但是
沒用過,我搞不懂為什么這樣寫不生效,有知道的大哥告訴我一下
uj5u.com熱心網友回復:
如果你用LocalDateTime,資料庫里面的資料的型別改成TimeStamp試試。這種自動創建時間的為什么不直接在設計表的時候可以讓其自動創建啊,default填new date()uj5u.com熱心網友回復:
直接在資料庫改成TimeStamp也不可以,還有,為什么不在表設計時創建,這個問得很好,如果那個表是別人設定的,而且有其他專案用到了那個表,請問在實際作業中我可以去修改資料庫欄位么?當然是不行的,所以mybatisPlus才提供這個方法,不然這個方法都沒存在的意義
uj5u.com熱心網友回復:
mybatis對于jdk8的LocalDateTime如果要支持的話需要做配置,一般mybatis默認支持的Java.sql.Date、java.sql.Timestamp、java.util.Date來映射到資料庫的date、timestamp、datetimeuj5u.com熱心網友回復:
至于你的LocalDateTime不行的問題,可以看下原始碼就知道了,是你的引數欄位和物體型別做了比較,不一致所以報錯
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/14387.html
標籤:Web 開發
上一篇:關于SpringAOP
下一篇:五年php要不要轉java?
