kotlin的mapstruct的使用案例,将一个对象转化为另一个对象

x33g5p2x  于2022-05-19 转载在 Java  
字(2.2k)|赞(0)|评价(0)|浏览(559)

当项目开发中涉及到dto的对象之间的转化,如下图所示,将grep中的cmdb.product转化为CmdbProduct对象,如下图所示:

  1. return cmdbGrpcClient.list(
  2. Cmdb.ListRequest.newBuilder().setProduct(cmdbProduct).build()
  3. ).productsList.map { product ->
  4. CmdbProduct(
  5. skuId = product.skuId,
  6. fastoneStrategy = product.fastoneStrategy,
  7. productLevel = product.productLevel,
  8. fastoneRegion = product.fastoneRegion,
  9. vendor = product.vendor,
  10. productType = ProductType.valueOf(product.productType),
  11. systemPlatform = SystemPlatform.valueOf(product.systemPlatform),
  12. fastoneModel = product.fastoneModel,
  13. fastoneFamily = product.fastoneFamily,
  14. vendorModel = product.vendorModel,
  15. payType = product.payType,
  16. price = product.price.toBigDecimal(),
  17. priceUnit = product.priceUnit,
  18. effectiveTime = product.effectiveTime,
  19. fastoneType = product.fastoneType,
  20. core = product.core.toInt(),
  21. vCpu = product.vCpu.toInt(),
  22. memory = product.memory.toInt(),
  23. gpu = takeIf { product.gpu != "" }?.let { Integer.valueOf(product.gpu) } ?: 0,
  24. gpuMemory = takeIf { product.gpuMemory != "" }?.let { Integer.valueOf(product.gpuMemory) } ?: 0,
  25. gpuType = product.gpuType,
  26. networkBandwidth = product.networkBandwidth,
  27. networkBandwidthUnit = product.networkBandwidthUnit,
  28. temporaryStorage = product.temporaryStorage,
  29. storageUnit = product.storageUnit,
  30. cpuModel = product.cpuModel,
  31. cpuFrequency = product.cpuFrequency,
  32. throughput = product.throughput,
  33. throughputUnit = product.throughputUnit,
  34. iops = product.iops,
  35. iopsUnit = product.iopsUnit,
  36. protocol = product.protocol,
  37. remark = product.remark,
  38. shutdownable = product.shutdownable
  39. )
  40. }

但是这种方法,如果遇到类很大,并且字段都一样的实体,就会显得很臃肿。
现在介绍一种更好的方法:mapstruct

  1. return cmdbGrpcClient.list(
  2. Cmdb.ListRequest.newBuilder().setProduct(cmdbProduct).build()
  3. ).productsList.map { product ->
  4. CmdbProductConverterImpl().convertToCmdbProduct(product)
  5. }

上面的代码转化为一句话

  1. CmdbProductConverterImpl().convertToCmdbProduct(product)

如何实现的呢?

第一、定义interface 能力

  1. @Mapper
  2. interface CmdbProductConverter {
  3. fun convertToCmdbProduct(product: Cmdb.Product): CmdbProduct
  4. }

第二、idea bulid 产生CmdbProductConverterImpl()方法

第三、在使用的地方就直接使用CmdbProductConverterImpl()进行转化

  1. return cmdbGrpcClient.list(
  2. Cmdb.ListRequest.newBuilder().setProduct(cmdbProduct).build()
  3. ).productsList.map { product ->
  4. CmdbProductConverterImpl().convertToCmdbProduct(product)
  5. }

具体使用方法,可以参考:
https://blog.csdn.net/qq_40194399/article/details/110162124

相关文章

最新文章

更多