Java值对象或DTO克隆工具


将一个对象中值复制到另外一个新对象中的工具: MapStruct ,使用方式:
1. 加入依赖:

<properties>
    <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
</properties>
...
<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>

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>

原始类:

public class CloneDTO {

    private String strVal;
    private Integer intVal;
    private int intVal2;
  
  // Default constructor, getter/setters...
  }

接口:

@Mapper(componentModel  =  “ spring ”)
public  interface  Cloner {
    public  CloneDTO  clone(CloneDTO  dto);
}

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ClonerTests {

    @Autowired
    Cloner mapper;

    @Test
    public void contextLoads() {

        CloneDTO dto = new CloneDTO("1", 2, 3);

        CloneDTO obj = mapper.clone(dto);

        assertThat(obj.getStrVal()).isEqualTo(
"1");
        assertThat(obj.getIntVal()).isEqualTo(2);
        assertThat(obj.getIntVal2()).isEqualTo(3);
        assertThat(dto.hashCode()).isNotEqualTo(obj.hashCode());
    }

}