常见的业务操作中 创建人、创建时间、更新人、更新时间 是我们比较关注的点 方便溯源 可以使用mybatisplus做通用处理
引入依赖
Spring boot版本 2.5.15
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
抽取一个通用的基类 其他业务对象来继承即可
@Data
@ToString
public class BaseEntity implements Serializable {
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
private String createdBy;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdTime;
/**
* 更新人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updatedTime;
实现MetaObjectHandler接口 重写mybatisplus原数据填充方法
@Component
public class DefaultMetaObjectHandler implements MetaObjectHandler {
private static final Set<String> SET= new HashSet<>(Arrays.asList("createdBy", "updatedBy"));
@Override
public void insertFill(MetaObject metaObject) {
TableInfo tableInfo = this.findTableInfo(metaObject);
if ((tableInfo.isWithInsertFill())) {
List<TableFieldInfo> fields = tableInfo.getFieldList();
for (TableFieldInfo field : fields) {
if (field.isWithInsertFill()) {
if (LocalDateTime.class.equals(field.getPropertyType())) {
strictFillStrategy(metaObject, field.getProperty(), LocalDateTime::now);
} else if (String.class.equals(field.getPropertyType()) && SET.contains(field.getProperty())) {
// 从业务上下文中获取当前用户
metaObject.setValue(field.getProperty(), BusinessContext.getCurrentUser().getAccount());
}
}
}
}
}
@Override
public void updateFill(MetaObject metaObject) {
TableInfo tableInfo = this.findTableInfo(metaObject);
if ((tableInfo.isWithUpdateFill())) {
List<TableFieldInfo> fields = tableInfo.getFieldList();
for (TableFieldInfo field : fields) {
if (field.isWithUpdateFill()) {
if (LocalDateTime.class.equals(field.getPropertyType())) {
metaObject.setValue(field.getProperty(), LocalDateTime.now());
} else if (String.class.equals(field.getPropertyType()) && SET.contains(field.getProperty())) {
metaObject.setValue(field.getProperty(), BusinessContext.getCurrentUser().getAccount());
}
}
}
}
}
}
如此 我们只用关注我们的业务即可