一、了解它
1.它是什么?
MapStruct 是一个代码生成器,它基于约定优于配置的方法,极大地简化了 Java bean 类型之间的映射实现。生成的映射代码使用普通的方法调用,因此速度快、类型安全且易于理解。
2.为什么要使用它?
多层应用程序通常需要在不同的对象模型(例如实体和 DTO)之间进行映射。编写这些映射代码是一项乏味且容易出错的任务。MapStruct 通过尽可能自动化来简化这项工作。
以往的开发中,我们可能会用到类似BeanUtil的一些映射框架,他们一般是通过Java的反射机制去完成的,这对于性能是有一定损耗的(虽然对于一些优秀的BeanUtil框架,性能损耗可以忽略,详见各种Bean映射性能对比)。
与动态映射框架相比,MapStruct具有以下优点:
-
通过使用普通方法调用代替反射来快速执行(生成的代码位于 target/generated-sources/annotations/ 目录)。
-
编译时类型安全:只有指明的对象和属性可以相互映射,不会出现一个order entity 被映射为customer DTO 等情况。
-
在build时即可清除映射错误:
- 映射不完整(并非所有的目标属性都被映射)
- 映射不正确(找不到合适的映射方法或类型转换)
3.一些网站
官网:MapStruct – Java bean mappings, the easy way!
示例:GitHub - mapstruct/mapstruct-examples: Examples for using MapStruct
汉译:MapStruct 1.4.2.最终参考指南_白云苍饭的博客-CSDN博客
4. 技术千万种,简单第一种。前人秀操作,后人两行泪。
(只针对mapstruct框架,因为没有必要让团队都花费很大的精力,去研究一个映射工具)
尽量简单、易读、易懂、易于维护,对于很复杂的表达,可以用原生语句去实现,不要为了用而用,产生高深的维护“护城河”。
二、开始
1.基于Maven
未来如果用的项目多了,可以集成到公共框架 / quickstart项目中。
|
2. IDE
①. 目前对于idea是直接支持的,eclipse还请自行百度
当我们执行过一次maven编译时,mapstruct已经帮我们生成了实现类,这时会出现以下图标,我们可以通过点击这些图标,快速跳转到实现类或者实现方法,来验证代码或者检查问题。
3. 获取实例:
①. Spring:在编写的转化类(可以是接口,也可以是抽象类)上打上@Mapper(componentModel = "spring")的注解,这将允许我们通过@Autowired 注入。
②. 其他注入方式或获取实例的方式(推荐上述方法①)。
4.常用的几个注解:
@Mapper、@MapperConfig、@Mapping、@IterableMapping、@Named,这在后面会继续说到。
5.一个简单的开始
①.首先我们需要在转化类(可以是接口,也可以是抽象类)上打上@Mapper的注解,这时mapstruct才会帮我们处理。
一般更建议使用@Mapper(componentModel = "spring"),这样我们可以通过@Autowired 进行注入。
②.转化方法:如果没有要处理的映射关系,我们不需要任何处理,只需要声明一个方法,入参是映射前的Class,返回值是映射后的Class。mapstruct会帮我们处理。
③.使用:通过注入的实例,调用转化方法即可。也可参照下面代码中的注释。
我们无需关注字段是setter/getter还是字段访问,也无需关注是构造函数还是builders,它都会帮我么处理映射。但是来自lombok的 @Data(staticConstructor = "of") 或者@Builder(access = AccessLevel.PRIVATE)是不被支持的。需要修改pom文件annotationProcessor的顺序。
更多的实例在下面,希望各位大佬继续补充一些自己的用法或者遇到的问题、解决方法,为刚开始使用的小伙伴能找到他想要的实例。
|