- 这是一个开源的组件,参考官方的说明 mapstruct.org,下面是将官网中的内容翻译出来。
- MapStruct是什么
- MapStruct是一个代码生成器,它基于约定优于配置的方法,极大地简化了Java bean类型之间映射的实现。
- 生成的映射代码是普通常见的方法调用,所以快速、安全并且简单易懂
- 原理其实同lombok差不多,提前将需要的代码生成。
- 为什么要用MapStruct
- ddd的多层结构常常要在不同的对象模型(例如entie和dto)间转换,编写这样的映射代码是一项乏味而且容易出错的任务。MapStruct的愿景是尽可能通过自动化来简化这项任务。
- 与其它的映射框架相比,MapStruct在编译时生成Bean映射,保证了高性能,使开人员快速得到结果的反馈,也快速完成错误检查。
- 怎么用
- MapStruct是一个插入到Java编译器中的注释处理器,可以在命令行构建(Maven、Gradle等)中使用,也可以在您首选的IDE中使用。
- MapStruct使用合理的默认值,但当涉及到配置或实现特殊行为时,它会避开你的方式。
- 使用的方法如下
-
引用pom文件
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.5.3.Final</version> </dependency>
-
转换的代码
@Mapper public interface MyUserMapper { MyUserMapper INSTANCE = Mappers.getMapper(MyUserMapper.class); MyUserPO myuser2PO(MyUserEntity myUser); MyUserEntity myUserPO2Entity(MyUserPO myUserPO); // list的转换 List<MyUserEntity> myUserPOs2Entity(List<MyUserPO> myUserPO); }
-
实际转换的使用
-
实际的代码调用
-
public MyUserEntity save(MyUserEntity myUser) { MyUserPO myUserPO = MyUserMapper.INSTANCE.myuser2PO(myUser); return MyUserMapper.INSTANCE.myUserPO2Entity(myUserDao.save(myUserPO)); }
-
备注:
1,这里是有缺陷的,如果实体的对象发生了变化,需要重新再编译这个生成的类。
2,这里的mapstruct版本是<mapstruct.version>1.5.3.Final</mapstruct.version>