Loading

SpringBoot引入MapStruct

https://mapstruct.org/documentation/dev/reference/html/

Adding MapStruct to your pom file

...
<properties>
    <org.mapstruct.version>1.5.1.Final</org.mapstruct.version>
	<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
</dependencies>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<version>${maven-compiler-plugin.version}</version>
            <configuration>
				<source>${maven.compiler.source}</source>
				<target>${maven.compiler.target}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>
...

配置(Configuration options)

...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
		<source>${maven.compiler.source}</source>
		<target>${maven.compiler.target}</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org.mapstruct.version}</version>
            </path>
        </annotationProcessorPaths>
        <!-- due to problem in maven-compiler-plugin, for verbose mode add showWarnings -->
        <showWarnings>true</showWarnings>
        <compilerArgs>
            <arg>
                -Amapstruct.suppressGeneratorTimestamp=true
            </arg>
            <arg>
                -Amapstruct.suppressGeneratorVersionInfoComment=true
            </arg>
            <arg>
                -Amapstruct.verbose=true
            </arg>
        </compilerArgs>
    </configuration>
</plugin>
...

与Spring整合

如下两种方式可以使生成的MapperImpl带有@Component注解,从而可以直接被Spring容器管理,通过@Autowired注入到其他bean中使用:

  • 方法1: 在pom.xml中配置compiler参数:mapstruct.defaultComponentModelspring
...
<compilerArgs>
	<arg>
		-Amapstruct.defaultComponentModel=spring
	</arg>
</compilerArgs>
...

这样配置后,项目中生成的MapperImpl默认都会有@Component注解

  • 方法2: 单独在接口的@Mapper注解中配置componentModel
@Mapper(componentModel = "spring")
public interface XxxMapper {
	...
}

这样配置后,为当前XxxMapper生成的XxxMapperImpl会带有@Component注解

与Lombok整合

...
<properties>
    <org.mapstruct.version>1.5.1.Final</org.mapstruct.version>
    <org.projectlombok.version>1.18.24</org.projectlombok.version>
	<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${org.projectlombok.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
...
<build>
    <plugins>
	    <plugin>  
		    <groupId>org.springframework.boot</groupId>  
		    <artifactId>spring-boot-maven-plugin</artifactId>  
		    <configuration>  
		        <excludes>  
		            <exclude>  
		                <groupId>org.projectlombok</groupId>  
		                <artifactId>lombok</artifactId>  
		            </exclude>  
		        </excludes>  
		    </configuration>  
		</plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
			<version>${maven-compiler-plugin.version}</version>
            <configuration>
				<source>${maven.compiler.source}</source>
				<target>${maven.compiler.target}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${org.projectlombok.version}</version>
                    </path>
                    <!-- additional annotation processor required as of Lombok 1.18.16 -->
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok-mapstruct-binding</artifactId>
                        <version>0.2.0</version>
                    </path>
                    <!-- OR -->
                    <!--
                    <dependency>
						<groupId>org.projectlombok</groupId>
						<artifactId>lombok-mapstruct-binding</artifactId>
						<version>0.2.0</version>
					</dependency>
                    -->
                </annotationProcessorPaths>
            </configuration>
            <compilerArgs>
				<arg>
					-Amapstruct.defaultComponentModel=spring
				</arg>
			</compilerArgs>
        </plugin>
        ...
    </plugins>
</build>
...
posted @ 2022-07-22 16:56  Hyleon  阅读(1102)  评论(1)    收藏  举报