重构:重构 MyBatis Plus 自动填充(注入)处理器逻辑,即使未继承 BaseEntity,只要标注了 @TableField(fill = FieldFill.xxxx) 就支持填充(注入)

This commit is contained in:
Charles7c 2022-09-12 14:17:13 +08:00 committed by charles7c@126.com
parent fc442f482d
commit 0dd1329022

View File

@ -17,27 +17,32 @@ import java.util.Date;
* MP注入处理器 * MP注入处理器
* *
* @author Lion Li * @author Lion Li
* @author Charles7c
* @date 2021/4/25 * @date 2021/4/25
*/ */
@Slf4j @Slf4j
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
/** 创建人 */
private static final String CREATE_BY = "createBy";
/** 创建时间 */
private static final String CREATE_TIME = "createTime";
/** 更新人 */
private static final String UPDATE_BY = "updateBy";
/** 更新时间 */
private static final String UPDATE_TIME = "updateTime";
@Override @Override
public void insertFill(MetaObject metaObject) { public void insertFill(MetaObject metaObject) {
try { try {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) { if (ObjectUtil.isNull(metaObject)) {
BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject(); return;
Date current = ObjectUtil.isNotNull(baseEntity.getCreateTime())
? baseEntity.getCreateTime() : new Date();
baseEntity.setCreateTime(current);
baseEntity.setUpdateTime(current);
String username = StringUtils.isNotBlank(baseEntity.getCreateBy())
? baseEntity.getCreateBy() : getLoginUsername();
// 当前已登录 创建人为空 则填充
baseEntity.setCreateBy(username);
// 当前已登录 更新人为空 则填充
baseEntity.setUpdateBy(username);
} }
this.fillFieldValue(metaObject, CREATE_BY, this.getLoginUsername(), false);
this.fillFieldValue(metaObject, CREATE_TIME, new Date(), false);
this.fillFieldValue(metaObject, UPDATE_BY, this.getLoginUsername(), false);
this.fillFieldValue(metaObject, UPDATE_TIME, new Date(), false);
} catch (Exception e) { } catch (Exception e) {
throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
} }
@ -46,22 +51,32 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
@Override @Override
public void updateFill(MetaObject metaObject) { public void updateFill(MetaObject metaObject) {
try { try {
if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) { if (ObjectUtil.isNull(metaObject)) {
BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject(); return;
Date current = new Date();
// 更新时间填充(不管为不为空)
baseEntity.setUpdateTime(current);
String username = getLoginUsername();
// 当前已登录 更新人填充(不管为不为空)
if (StringUtils.isNotBlank(username)) {
baseEntity.setUpdateBy(username);
}
} }
this.fillFieldValue(metaObject, UPDATE_BY, this.getLoginUsername(), true);
this.fillFieldValue(metaObject, UPDATE_TIME, new Date(), true);
} catch (Exception e) { } catch (Exception e) {
throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
} }
} }
/**
* 填充注入属性值
*
* @param metaObject 元数据对象
* @param fieldName 要填充的属性名
* @param fillFieldValue 要填充的属性值
* @param isOverride 如果属性值不为空是否覆盖true 覆盖false 不覆盖
*/
private void fillFieldValue(MetaObject metaObject, String fieldName, Object fillFieldValue, boolean isOverride) {
if (metaObject.hasSetter(fieldName)) {
Object fieldValue = metaObject.getValue(fieldName);
setFieldValByName(fieldName, ObjectUtil.isNotNull(fieldValue) && !isOverride ? fieldValue : fillFieldValue, metaObject);
}
}
/** /**
* 获取登录用户名 * 获取登录用户名
*/ */
@ -75,5 +90,4 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
} }
return loginUser.getUsername(); return loginUser.getUsername();
} }
} }