MapStruct使用工具类中的方法来映射字段
发布日期:2025-04-12 00:32:17 浏览次数:9 分类:精选文章

本文共 1487 字,大约阅读时间需要 4 分钟。

在开发过程中,当从数据库获取的数据需要经过处理后返回给前端时,直接使用MapStruct进行映射往往无法实现所需的数据转换需求。例如,数据库存储的价格单位通常是分,但前端需要以元为单位呈现。这就需要我们编写工具类和方法来处理数据转换。

解决方案

为解决上述问题,我们可以编写一个工具类MoneyConverterUtil,其中包含一个方法fenToYuan,用于将分转换为元。该方法的实现如下:

public class MoneyConverterUtil {    public static BigDecimal fenToYuan(BigDecimal fen) {        return fen.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);    }}

接下来,我们可以在MapStruct映射中使用该方法来转换相应的字段。以下是一个示例的Mapper接口:

import org.mapstruct.Mapper;import org.mapstruct.Mapping;import org.mapstruct.Mappings;import org.mapstruct.factory.Mappers;@Mapperpublic interface TariffPackageMapper {    TariffPackageMapper INSTANCE = Mappers.getMapper(TariffPackageMapper.class);    @Mappings({        @Mapping(target = "purchaseCostPrice",                expression = "java(com.sundark.common.utils.MoneyConverterUtil.fenToYuan(source.getPurchaseCostPrice()))"),        @Mapping(target = "resourceCostPrice",                expression = "java(com.sundark.common.utils.MoneyConverterUtil.fenToYuan(source.getResourceCostPrice()))")    })    TariffPackageResponse doToResponse(TariffPackage source);}

注意事项

在上述实现中,需要注意以下几点:

  • 类路径指定:确保MoneyConverterUtil类的全类名com.sundark.common.utils.MoneyConverterUtil在映射表达式中正确指定,避免类路径不解的错误。

  • 表达式语法:在@Mapping注解的expression属性中,确保使用正确的Java表达式格式,避免语法错误。

  • 工具类方法的调用:确保工具类方法fenToYuan能够正确接收和返回数据类型,避免类型转换错误。

  • 性能优化:MapStruct生成的实现类会根据映射规则动态调用工具类方法,因此在高频调用的场景中,建议对工具类方法进行适当的缓存处理,以提升性能。

  • 总结

    通过以上方法,我们可以在MapStruct映射中轻松地调用自定义的工具类方法,完成数据转换任务。这种方式既保持了MapStruct的灵活性,又使数据处理逻辑更加集中,便于维护和扩展。

    上一篇:MapStruct的使用教程
    下一篇:MapStruct 超神进阶用法,让你的代码效率提升十倍!

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年05月13日 01时42分06秒