background
MySQL database, the field name in the table is creatDate , and the type is datetime. The corresponding variable in the Java entity class is creatDate of type java.time.LocalDateTime .
When using the new and updated methods, the creation date time and last update time are automatically updated.
entity class
/** * 创建日期 */ @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @TableField(value = "creatDate",fill = FieldFill.INSERT) private LocalDateTime creatDate; /** * 更新日期 */ @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @TableField(value = "lastUpDate",fill = FieldFill.INSERT_UPDATE) private LocalDateTime lastUpDate;
Using the idea of AOP, implement the MetaObjectHandler interface, and implement the insertFill and updateFill methods, as follows:
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("creatDate",new Date(), metaObject); this.setFieldValByName("lastUpDate", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("lastUpDate", new Date(), metaObject); } }
Could not set property 'creatDate' of 'class com.siyuan.articles.model.Content' with value 'Fri Jul 03 10:21:44 CST 2020' Cause: java.lang.IllegalArgumentException: argument type mismatch
The reason is that the entity class is of type LocalDateTime, while it is of type new Date() in MyMetaObjectHandler, so this error is reported. Just change the new Date() in MyMetaObjectHandler to LocalDateTime.now() ;
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("creatDate",LocalDateTime.now(), metaObject); this.setFieldValByName("lastUpDate", LocalDateTime.now(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("lastUpDate", LocalDateTime.now(), metaObject); } }