mapstruct类转换器

mapstruct类转换器

插件介绍

这个插件主要作用于对象转换器(属性名不一致的情况下)也可以正常的转换,例如将1个或者多个实体类转换为一个实体类

将PO对象集合转换为VO对象集合等等

maven

<!--版本依赖-->
    <properties>
        <org.mapstruct.version>1.3.1.Final</org.mapstruct.version>
        <lombok.version>1.18.12</lombok.version>
    </properties>
        <dependencies>
      <!-- lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-mapstruct-binding</artifactId>
            <version>0.2.0</version>
        </dependency>
                <!--MapStruct相关依赖-->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>
            </dependencies>

可以省略部分

 <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.6.0</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                    <annotationProcessorPaths>

                        <path>

                            <groupId>org.mapstruct</groupId>

                            <artifactId>mapstruct-processor</artifactId>

                            <version>1.3.1.Final</version>

                        </path>

                        <path>

                            <groupId>org.projectlombok</groupId>

                            <artifactId>lombok</artifactId>

                            <version>${lombok.version}</version>

                        </path>

                    </annotationProcessorPaths>

                </configuration>

            </plugin>

先后顺序有区别,并且这个版本兼容新也可以不需要追求新的版本

lombok加载必须早于mapstruct否则会失效,如果转换失败建议查看加载的元件删除重新导包编译

idea插件

lombok

image-20220903225244450

mapstruct

image-20220903225347262

使用教学

准备操作:

  • 新建一个接口(填写类上注解)
@Mapper
public interface ConverterUtils {}
  • 加入一个常量
ConverterUtils INSTANCE = Mappers.getMapper(ConverterUtils.class);
  • 编写转换器

场景一:(单属性不一致转换)

@Mapping(source = "image", target = "age")
Animal ToAnimal(Cat cat);

场景二:(集合转换)

  @Mappings({
            @Mapping(source = "code", target = "warnobjectcode"),
            @Mapping(source = "mdcad", target = "mdcd")}
    )
Animal ToAnimal(Cat cat);

场景三:(集合转换)

@Mappings({
        @Mapping(source = "code", target = "warnobjectcode"),
        @Mapping(source = "mdcad", target = "mdcd")}
)
DcMdMdwarnobjectB DcMdMdwarnobjectBVoToPo(DcMdMdwarnobjectBVo dcMdMdwarnobjectBVos);
List<DcMdMdwarnobjectB>getList(List<DcMdMdwarnobjectBVo>dcMdMdwarnobjectBVos);

对比单体转换器

BeanUtil.copyProperties();
 ConverterUtils.INSTANCE.getList(bVos);

copyProperties()只会克隆同属性字段

ConverterUtils.INSTANCE.getList(bVos) 支持克隆集合还有不同属性名的对象以及多个对象合并为一个

THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容