MybatisPlusMetaObjectHandler.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package cn.com.jdkj.config;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.ibatis.reflection.MetaObject;
  6. import org.springframework.util.ClassUtils;
  7. import java.nio.charset.Charset;
  8. import java.time.LocalDateTime;
  9. /**
  10. * MybatisPlus 自动填充配置
  11. *
  12. * @author L.cm
  13. */
  14. @Slf4j
  15. public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
  16. @Override
  17. public void insertFill(MetaObject metaObject) {
  18. log.debug("mybatis plus start insert fill ....");
  19. LocalDateTime now = LocalDateTime.now();
  20. // 审计字段自动填充
  21. fillValIfNullByName("createTime", now, metaObject, false);
  22. fillValIfNullByName("updateTime", now, metaObject, false);
  23. // fillValIfNullByName("createBy", getUserName(), metaObject, false);
  24. // fillValIfNullByName("updateBy", getUserName(), metaObject, false);
  25. // 删除标记自动填充
  26. fillValIfNullByName("delFlag", "0", metaObject, false);
  27. }
  28. @Override
  29. public void updateFill(MetaObject metaObject) {
  30. log.debug("mybatis plus start update fill ....");
  31. fillValIfNullByName("updateTime", LocalDateTime.now(), metaObject, true);
  32. // fillValIfNullByName("updateBy", getUserName(), metaObject, true);
  33. }
  34. /**
  35. * 填充值,先判断是否有手动设置,优先手动设置的值,例如:job必须手动设置
  36. * @param fieldName 属性名
  37. * @param fieldVal 属性值
  38. * @param metaObject MetaObject
  39. * @param isCover 是否覆盖原有值,避免更新操作手动入参
  40. */
  41. private static void fillValIfNullByName(String fieldName, Object fieldVal, MetaObject metaObject, boolean isCover) {
  42. // 0. 如果填充值为空
  43. if (fieldVal == null) {
  44. return;
  45. }
  46. // 1. 没有 get 方法
  47. if (!metaObject.hasSetter(fieldName)) {
  48. return;
  49. }
  50. // 2. 如果用户有手动设置的值
  51. Object userSetValue = metaObject.getValue(fieldName);
  52. String setValueStr = StrUtil.str(userSetValue, Charset.defaultCharset());
  53. if (StrUtil.isNotBlank(setValueStr) && !isCover) {
  54. return;
  55. }
  56. // 3. field 类型相同时设置
  57. Class<?> getterType = metaObject.getGetterType(fieldName);
  58. if (ClassUtils.isAssignableValue(getterType, fieldVal)) {
  59. metaObject.setValue(fieldName, fieldVal);
  60. }
  61. }
  62. // /**
  63. // * 获取 spring security 当前的用户名
  64. // * @return 当前用户名
  65. // */
  66. // private String getUserName() {
  67. // Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  68. // if (Optional.ofNullable(authentication).isPresent()) {
  69. // return authentication.getName();
  70. // }
  71. // return null;
  72. // }
  73. }