isayme / blog

https://blog.isayme.org
MIT License
10 stars 2 forks source link

SpringBoot 集成 MapStruct #66

Open isayme opened 2 years ago

isayme commented 2 years ago

集成步骤

1. 引入依赖

<!-- 样例 https://github.com/mapstruct/mapstruct-examples/blob/master/mapstruct-lombok/pom.xml -->
<properties>  
    <java.version>1.8</java.version>
    <!-- mapstruct 版本 -->
    <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
    <!-- lombok 1.18.16 版本之后用 -->
    <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
    <!-- lombok 版本 -->
    <org.projectlombok.verion>1.18.22</org.projectlombok.verion>
</properties>

<dependencies>
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>

    <!-- 引入 mapstruct -->
    <dependency>  
        <groupId>org.mapstruct</groupId>  
        <artifactId>mapstruct</artifactId>  
        <version>${org.mapstruct.version}</version>  
    </dependency>

    <!-- 引入 lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>  
        <artifactId>lombok</artifactId>  
        <version>${org.projectlombok.verion}</version>  
    </dependency>  
</dependencies>

<build>  
    <plugins>  
        <plugin>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-maven-plugin</artifactId>  
        </plugin>
        <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>  
                <!-- mapstruct 插件 -->
                <path>  
                    <groupId>org.mapstruct</groupId>  
                    <artifactId>mapstruct-processor</artifactId>  
                    <version>${org.mapstruct.version}</version>  
                </path>  
                <!-- lombok 插件 -->
                <path>  
                    <groupId>org.projectlombok</groupId>  
                    <artifactId>lombok</artifactId>  
                    <version>${org.projectlombok.verion}</version>  
                </path>
                <path>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok-mapstruct-binding</artifactId>
                    <version>${lombok-mapstruct-binding.version}</version>
                </path>
                <!-- other annotation processors -->  
                </annotationProcessorPaths>  
                <compilerArgs>  
                    <!-- mapstruct 配置,使得定义的 Mapper 可通过 @Resource 注解注入 -->
                    <arg>
                        -Amapstruct.defaultComponentModel=spring  
                    </arg>  
                </compilerArgs>
            </configuration>  
        </plugin>  
    </plugins>  
</build>

2. 定义模型及模型转换接口

@Data  
public class Source {  
    private String k;  
}

@Data  
public class Destination {  
    private String k;  
}

// @Mapper(componentModel = "spring")  如未配置defaultComponentModel=spring,可以在此处配置。
@Mapper
public interface Converter {  
    Destination convertToDestination(Source s);  
}

3. 使用模型转换器

import static org.junit.Assert.assertEquals;

@SpringBootTest
class ConverterTest {
    // 自动注入
    @Resource
    private Converter converter;

    @Test
    public test() {
        Source source = new Source();  
        source.setK(UUID.randomUUID().toString());  
        Destination destination = myMapper.to(source);
        assertEquals(destination.getK(), source.getK());
    }
}

常见场景及解决方案

参考链接