1. spring 工具类
BeanUtils.copyProperties 简单的实体类之间的转换, 不能 copy Date 类型, 利用 java 反射的原理来进行属性的复制. 如果两个实体的类的里面嵌套实体类的类型不一样, copy 后实体类的变为原实体类的类型, 当在此使用
目标实体类的时候会发生类型的转化异常.
2.
MapStruct 是一个代码生成器的工具类, 简化了不同的 Java Bean 之间映射的处理, 所以映射指的就是从一个实体变化成一个实体. 在实际项目中, 我们经常会将 PO 转 DTO,DTO 转 PO 等一些实体间的转换. 在转换时大部分属性都是相同的, 只有少部分的不同, 这时我们可以通过 mapStruct 的一些注解来匹配不同属性, 可以让不同实体之间的转换变的简单.
- <dependency>
- <groupId>org.mapstruct</groupId>
- <artifactId>mapstruct-jdk8</artifactId>
- <version>${org.mapstruct.version}</version>
- </dependency>
- <dependency>
- <groupId>org.mapstruct</groupId>
- <artifactId>mapstruct-processor</artifactId>
- <version>${org.mapstruct.version}</version>
- </dependency>
要生成一个 PeopleDTO 与 PeopleEntity 对象相互转换的映射器, 我们需要定义一个 mapper 接口. 像这两个实体类有些属性不一样时, 我们可以通过 @Mapping 注解来进行转换.
@Mapper 注解标记这个接口作为一个映射接口, 并且是编译时 MapStruct 处理器的入口.
@Mapping 解决源对象和目标对象中, 属性名字不同的情况.
Mappers.getMapper 自动生成的接口的实现可以通过 Mapper 的 class 对象获取, 从而让客户端可以访问 Mapper 接口的实现.
MapStruct 是以 Java 编译器插件的形式来处理注解, 生成 mapper 接口的实现. 因此在使用之前我们要手工编译或启动程序时 IDEA 也会帮我们编译了, 这里最好还是手动编译.
来源: http://www.bubuko.com/infodetail-2928271.html