Bean拷贝工具MapStruct


MapStruct是一种在编译时就生产bean拷贝代码的bean copy工具。

简单实用

maven配置

这里需要注意的是插件中lombok和mapstruct-processor的配置

    
        1.3.1.Final
        1.18.12
    

    
        
            org.mapstruct
            mapstruct
            ${org.mapstruct.version}
        
        
            org.projectlombok
            lombok
            ${org.projectlombok.version}
            provided
        
    
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    
                        
                            org.projectlombok
                            lombok
                            ${org.projectlombok.version}
                        
                        
                            org.mapstruct
                            mapstruct-processor
                            ${org.mapstruct.version}
                        
                    
                
            
        
    

配置转换器

package com.yihengyi.beans.converters;

import com.yihengyi.beans.dos.PersonDo;
import com.yihengyi.beans.dtos.PersonDto;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

@Mapper
public interface PersonConverter {
    PersonConverter INSTANCE = Mappers.getMapper(PersonConverter.class);

    @Mappings(@Mapping(source = "name", target = "userName"))
    PersonDto do2dto(PersonDo person);
}

测试

package com.yihengyi.mapstruct;

import com.yihengyi.beans.converters.PersonConverter;
import com.yihengyi.beans.dos.PersonDo;
import com.yihengyi.beans.dtos.PersonDto;
import com.yihengyi.beans.enums.Gender;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

import java.util.Date;

public class BeanCopyTest {
    @Test
    public void testBeanCopy() {
        PersonDo personDo = new PersonDo();
        personDo.setName("Hollis");
        personDo.setAge(28);
        personDo.setBirthday(new Date());
        personDo.setId(1);
        personDo.setGender(Gender.FEMALE);

        PersonDto personDto = PersonConverter.INSTANCE.do2dto(personDo);
        System.out.println(personDto);
        assertEquals("Hollis", personDto.getUserName());
    }
}

测试结果:
运行mvn test命令

Running com.yihengyi.mapstruct.BeanCopyTest
PersonDto(userName=Hollis, age=28, birthday=Sat Aug 15 23:15:53 CST 2020, gender=FEMALE)
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.066 sec

代码地址

https://github.com/yihengyi/map-struct-test

参考:

https://mp.weixin.qq.com/s/a-UDuXallZkHqj5hJSukZg