1. ↖回到主目录

2. 自动填充组件 FillDataHandler

  • 注解填充字段 @TableField(fillUpdate = true, fillInsert = true)
  1. @Setter
  2. @Getter
  3. @Accessors(chain = true)
  4. @Table(name = "users")
  5. public class UserDTO extends DataDTO {
  6. /**
  7. * 创建人
  8. * 注意!这里需要标记为 插入填充
  9. */
  10. @TableField(fillInsert = true)
  11. private String createUser;
  12. /**
  13. * 修改人
  14. * 注意!这里需要标记为 插入和更新填充
  15. */
  16. @TableField(fillUpdate = true, fillInsert = true)
  17. private String updateUser;
  18. ....
  19. }
  • 自定义实现类 FillDataHandlerConfig
  1. /**
  2. * DTO实体对象注解的 填充组件实现, 实现接口 FillDataHandler
  3. */
  4. @Component
  5. public class FillDataHandlerConfig implements FillDataHandler {
  6. @Autowired
  7. RestSessionConfig restSessionConfig;
  8. /**
  9. * 新增和更新的填充
  10. * @param fillFields 新增或者更新填充的字段
  11. * @param list 新增或者更新的数据
  12. */
  13. @Override
  14. public void fillData(Map<String, Field> fillFields, List<DataDTO> list) {
  15. RestSession restSession=restSessionConfig.get();
  16. list.forEach((dto)->{
  17. String state = dto.dataState();
  18. fillFields.forEach((fieldName,field)->{
  19. //新增时这两个字段都要赋值
  20. if (DbState.INSERT.equals(state) && (field.isFillUpdate() ||field.isFillInsert())){
  21. switch (fieldName){
  22. case "createUser":
  23. case "updateUser":
  24. dto.setValue(fieldName,restSession.getUserName());
  25. }
  26. }
  27. //更新时只对一个字段赋值
  28. if (DbState.UPDATE.equals(state) && field.isFillUpdate()){
  29. switch (fieldName){
  30. case "updateUser":
  31. dto.setValue(fieldName,restSession.getUserName());
  32. break;
  33. }
  34. }
  35. });
  36. });
  37. }
  38. }

::: warning 注意事项

  • 字段必须声明TableField注解,属性fillUpdate,fillInsert 选择对应策略
  • 填充组件 FillDataHandlerConfig 在 Spring Boot 中需要声明 @Component 注入
  • 必须使用父类 DataDTO 的 setValue() 赋值