MapStruct

阅读: 评论:0

MapStruct

MapStruct

目录

    • 什么是MapStruct?
          • 要在两种类型之间创建映射,请声明一个映射器类,如下所示:
          • 需要引入的maven依赖
      • 为什么要使用MapStruct

什么是MapStruct?

MapStruct 是一个 Java 注释处理器,用于为 Java Bean 类生成类型安全和高性能映射器。它使您不必手动编写映射代码,这是一项繁琐且容易出错的任务。生成器具有合理的默认值和许多内置的类型转换,但是在配置或实现特殊行为时,它会逐渐消失。

与在运行时工作的映射框架相比,MapStruct 具有以下优势:

  • 通过使用普通方法调用而不是反射来快速执行
  • 编译时类型安全。只能映射相互映射的对象和属性,因此不会意外地将订单实体映射到客户 DTO 等。
  • 自包含代码 — 无运行时依赖项
  • 在以下情况下,在构建时清除错误报告
    • 映射不完整(并非所有目标属性都已映射)
    • 映射不正确(找不到正确的映射方法或类型转换)
  • 易于调试的映射代码(或可手动编辑 - 例如,在生成器中出现错误的情况下)
要在两种类型之间创建映射,请声明一个映射器类,如下所示:
@Mapper
public interface CarMapper {CarMapper INSTANCE = Mapper( CarMapper.class );@Mapping(target = "seatCount", source = "numberOfSeats")CarDto carToCarDto(Car car);
}

在编译时,MapStruct 将生成此接口的实现。生成的实现使用普通的Java方法调用在源对象和目标对象之间进行映射,即不涉及反射。默认情况下,如果属性在源和目标中具有相同的名称,则会映射属性,但您可以使用少量其他批注来控制此方面和许多其他方面。@Mapping

需要引入的maven依赖

注意此处可能与lombok有冲突 我的建议是直接去除掉lombok这种流氓插件 很多人也非常爱滥用lombok 通常会把类搞得很臃肿

<properties><org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
</properties><dependencies><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>${org.mapstruct.version}</version></dependency>
</dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><annotationProcessorPaths><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${org.mapstruct.version}</version></path></annotationProcessorPaths></configuration></plugin></plugins>
</build>

为什么要使用MapStruct

平时我们自己写代码通常会涉及到很多Vo,Dto,Entity等的转换 自己写get和set的话很麻烦,用spring或者Apache的BeanUtils方法效率又有问题因为他们是调用的反射 而且转换也不直观 无法预估代码会出现什么问题 但是MapStruct在编译和构建期间就自动生成出来了转换类 完全处于自己可控的范围 而且生成出来的是原生的get set方法 效率上跟原生是相等的

本文发布于:2024-01-27 19:31:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063550802190.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:MapStruct
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23