Mybatis-plus自动填充字段
·
自动填充功能通过实现 com.baomidou.mybatisplus.core.handlers.MetaObjectHandler 接口来实现
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
// 仅在插入时填充
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
// 在插入和更新时都填充
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
// 仅在插入时填充
@TableField(fill = FieldFill.INSERT)
private String createBy;
// 在插入和更新时都填充
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy;
}
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("开始插入填充...");
// 填充创建时间
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
// 填充更新时间(插入时与创建时间一致)
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
// 填充创建人(模拟从上下文获取当前登录用户)
this.strictInsertFill(metaObject, "createBy", String.class, getCurrentUser());
// 填充更新人(插入时与创建人一致)
this.strictInsertFill(metaObject, "updateBy", String.class, getCurrentUser());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("开始更新填充...");
// 填充更新时间
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
// 填充更新人
this.strictUpdateFill(metaObject, "updateBy", String.class, getCurrentUser());
}
// 获取当前用户(实际项目中从Token/Session解析)
private String getCurrentUser() {
return Optional.ofNullable(SecurityContextHolder.getContext())
.map(SecurityContext::getAuthentication)
.map(Authentication::getName)
.orElse("system");
}
}
流程

更多推荐



所有评论(0)