mp时间自动填充

首先,在用之前一定要知道,想要时间能够被自动填充,xxxmapper必须要继承BaseMapper《T》,然后使用basemapper中的方法(自己写的insert sql语句,时间不会被自动填充)

1.在需要被填充的字段上加上@TableField

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入填充字段
*/
INSERT,
/**
* 更新填充字段
*/
UPDATE,
/**
* 插入和更新填充字段
*/
INSERT_UPDATE
}
1
2
@TableField(fill = FieldFill.INSERT)
private LocalDateTime operTime;
创建时间,一般用FieldFill.INSERT即可,更新时间一般用FieldFill.INSERT_UPDATE(因为第一次更新时没有数据,是插入)

2.自定义实现类MyMetaObjectHandler

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
}

@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)

}
}

3.如果有多个要填充的字段(比如在这里,为了兼容不同开发者不同的时间字段)

1
2
3
4
5
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "operTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
}

这样即可填充数据库中的oper_time,create_time字段

4.取出的时间有T,加上@JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

GMT+8:时间设置为东八区
没加@JsonFormat
1
2
@TableField(fill = FieldFill.INSERT)
private LocalDateTime operTime;

加@JsonFormat
1
2
3
@TableField(fill = FieldFill.INSERT)
@JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") //加上此注解,去掉时间中的T
private LocalDateTime operTime;