代码优化:使用 MapStruct 简化对象映射

本文展示了如何使用 MapStruct 库来简化对象映射,以提高代码可读性和可维护性。示例代码展示了如何将 ComputeResultExportDTO 对象映射到 ComputeResultExportDTO 对象,并使用表达式来处理复杂映射关系。

@Mapper
public interface ComputeResultExportMapper {

    @Mappings({
        @Mapping(target = 'examineEvaluationId', source = 'computeResultExportDTO.examineEvaluationId'),
        @Mapping(target = 'levelName', source = 'computeResultExportDTO.levelName'),
        @Mapping(target = 'levelWeight', source = 'computeResultExportDTO.levelWeight'),
        @Mapping(target = 'levelGroup', source = 'computeResultExportDTO.levelGroup'),
        @Mapping(target = 'examineWight', source = 'computeResultExportDTO.examineWight'),
        @Mapping(target = 'weightGroupName', source = 'computeResultExportDTO.weightGroupName'),
        @Mapping(target = 'democraticTotalScore', source = 'computeResultExportDTO.democraticTotalScore'),
        @Mapping(target = 'incorruptibleTotalScore', source = 'computeResultExportDTO.incorruptibleTotalScore'),
        @Mapping(target = 'assessScore', source = 'computeResultExportDTO.assessScore'),
        @Mapping(target = 'centennialScore', source = 'computeResultExportDTO.centennialScore'),
        @Mapping(target = 'evaluationDimension', source = 'computeResultExportDTO.evaluationDimension'),
        @Mapping(target = 'dimensionLevel', source = 'computeResultExportDTO.dimensionLevel'),
        @Mapping(target = 'tableName', source = 'computeResultExportDTO.tableName'),
        @Mapping(target = 'tableSort', source = 'computeResultExportDTO.tableSort'),
        @Mapping(target = 'scoreWight', source = 'computeResultExportDTO.scoreWight'),
        @Mapping(target = 'suggestedLevel', source = 'computeResultExportDTO.suggestedLevel'),
        @Mapping(target = 'empNameGroup', source = 'computeResultExportDTO.empNameGroup'),
        @Mapping(target = 'ranking', source = 'computeResultExportDTO.ranking'),
        @Mapping(target = 'deptName', source = 'computeResultExportDTO.deptName'),
        @Mapping(target = 'identity', source = 'computeResultExportDTO.identity'),
        @Mapping(target = 'empName', source = 'computeResultExportDTO.empName'),
        @Mapping(target = 'empCode', source = 'computeResultExportDTO.empCode'),
        @Mapping(target = 'scoreItemId', source = 'computeResultExportDTO.scoreItemId'),
        @Mapping(target = 'totalScore', source = 'computeResultExportDTO.totalScore'),
        @Mapping(target = 'scores', expression = 'java(MapUtils.getObject(scoreGroup, computeResultExportDTO.getExamineEvaluationId(),Collections.emptyList()))'),
        @Mapping(target = 'integrityScores', expression = 'java(MapUtils.getObject(honestScoreGroup, computeResultExportDTO.getExamineEvaluationId(),Collections.emptyList()))')
    })
    ComputeResultExportDTO convertToEntity(ComputeResultExportDTO computeResultExportDTO,
                                           Map<String, List<BigDecimal>> scoreGroup,
                                           Map<String, List<BigDecimal>> honestScoreGroup);
}

代码说明:

  • @Mapper 注解标识该接口是一个 MapStruct 映射器。
  • @Mappings 注解用于定义多个映射关系。
  • @Mapping 注解用于定义单个映射关系,包括目标属性名称 (target) 和源属性名称 (source)。
  • expression 属性用于定义复杂映射关系,使用 Java 表达式来处理映射逻辑。

优点:

  • 代码简洁:使用 MapStruct 可以避免手动编写繁琐的映射代码。
  • 可读性强:使用声明式映射语法,代码更加易于理解和维护。
  • 可维护性高:当数据结构发生变化时,只需要修改映射关系,无需修改大量代码。

总结:

MapStruct 库提供了一种简单、高效的方式来实现对象映射,可以有效地提高代码质量。在项目中,可以考虑使用 MapStruct 来简化对象映射操作。


原文地址: https://www.cveoy.top/t/topic/fdb4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录