通常在使用JPA的時候,我們定義時間類型的屬性:
@Column( columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment ' 創建時間'") @Temporal(TemporalType.TIMESTAMP) @Transaction protected Date gmtCreated;
其中
@Column可以指定屬性在數據庫中的存儲類型以及註解
@Temporal:可以指定前端取值的類型
@Temporal(TemporalType.DATE): 在頁面端取值:2016--09--28
@Temporal(TemporalType.TIME): 在頁面端取值:15:50:30
@Temporal(TemporalType.TIMESTAMP): 在頁面端取值:2016-09-28 15:52:32:000
@Transaction:表示數據在數據庫中不創建字段
以上這些都是屬於JPA註解
在mybatisPlus中
@TableField(value = "update_time",exist = true,fill = FieldFill.INSERT_UPDATE) private Date updateTime;
@TableField表示字段註解
valeu:指定字段在數據庫中的列名
exist:表示屬性是否在數據庫中創建字段
fill:填充策略。標明在什麼時候填充默認值。此註解需要實現元對象處理器接口
示例代碼如下:
實體類
public class User {
// 注意!這裏需要標記爲填充字段
@TableField(.. fill = FieldFill.INSERT)
private String fillField;
....
}
元對象處理器實現類
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推薦使用)
// 或者
this.strictUpdateFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推薦)
// 或者
this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 該方法有bug)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推薦)
// 或者
this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推薦)
// 或者
this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 該方法有bug)
}
}