通常在使用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)
}
}