Java編碼輔助工具:Mapstruct—— Java對象轉換框架


項目開發中,業務分層會涉及不同類型的Bean之間需要相互轉換,如PO與DTO之間,PO與VO之間等。手動編碼setter/getter各個對應屬性,會顯得臃腫繁瑣。通過Mapstruct框架可簡單方便地完成這一工作。

如何引入:

IntelliJ IDEA中安裝MapStruct Support插件:File -> Settings -> Plugins  搜索 MapStruct support 安裝,同時File -> Settings -> Compiler -> Annotation Processors 勾選“Enable annotation processing”

pom.xml中加入依賴

 <dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-jdk8</artifactId>
    <version>1.2.0.Final</version>
    <scope>provided</scope>
</dependency>

build配置

 <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.16.18</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.2.0.Final</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 

常用注解使用

@Mapper, 修飾接口或抽象類, 如果使用spring來管理,則:@Mapper(componentModel = "spring")

定義對應的Bean轉換方法: 

public abstract XXXVO map(XXXPO xxxPo);
public abstract List<XXXVO> map(List<XXXPO> xxxPos);

如果對應屬性名稱不一致,則可通過

@Mappings(value={

  @Mapping(target="abc", source="cba"),

  @Mapping(target="acc", source="cca", qualifiedByName="mapMethodName2"), //定義轉換的方法

  @Mapping(target="aaa",  constant="123")  //定義常量

})

@AfterMapping // 在map屬性完之后執行某些操作

public void afterListMap(@MappingTarget List<XXXVO> xxxVOs) //map完的結果對象 

@BeforeMapping //在map屬性之前執行某些操作

public void beforeListMap(Object anySource, @MappingTarget List<XXXPO> xxxVOs)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM