本文共 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的灵活性,又使数据处理逻辑更加集中,便于维护和扩展。
转载地址:http://jgufk.baihongyu.com/