modified nested mapping section

This commit is contained in:
jesus-dayo 2016-08-17 18:02:45 +08:00
parent 5663f044c6
commit 55ea01d4bd
15 changed files with 350 additions and 191 deletions

49
mapstruct/bin/pom.xml Normal file
View File

@ -0,0 +1,49 @@
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<artifactId>mapstruct</artifactId>
<name>mapstruct</name>
<groupId>com.baeldung</groupId>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<org.mapstruct.version>1.0.0.Final</org.mapstruct.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>mapstruct</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<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>
</project>

View File

@ -24,6 +24,17 @@
<version>4.12</version> <version>4.12</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.2.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>mapstruct</finalName> <finalName>mapstruct</finalName>

View File

@ -0,0 +1,33 @@
package org.baeldung.dto;
public class DivisionDTO {
public DivisionDTO() {
}
public DivisionDTO(int id, String name) {
super();
this.id = id;
this.name = name;
}
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -4,8 +4,7 @@ public class EmployeeDTO {
private int employeeId; private int employeeId;
private String employeeName; private String employeeName;
private int divisionId; private DivisionDTO division;
private String divisionName;
public int getEmployeeId() { public int getEmployeeId() {
return employeeId; return employeeId;
@ -23,20 +22,12 @@ public class EmployeeDTO {
this.employeeName = employeeName; this.employeeName = employeeName;
} }
public int getDivisionId() { public DivisionDTO getDivision() {
return divisionId; return division;
} }
public void setDivisionId(int divisionId) { public void setDivision(DivisionDTO division) {
this.divisionId = divisionId; this.division = division;
}
public String getDivisionName() {
return divisionName;
}
public void setDivisionName(String divisionName) {
this.divisionName = divisionName;
} }
} }

View File

@ -1,6 +1,8 @@
package org.baeldung.mapper; package org.baeldung.mapper;
import org.baeldung.dto.DivisionDTO;
import org.baeldung.dto.EmployeeDTO; import org.baeldung.dto.EmployeeDTO;
import org.baeldung.entity.Division;
import org.baeldung.entity.Employee; import org.baeldung.entity.Employee;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
@ -9,19 +11,14 @@ import org.mapstruct.Mappings;
@Mapper @Mapper
public interface EmployeeMapper { public interface EmployeeMapper {
@Mappings({ @Mappings({ @Mapping(target = "employeeId", source = "entity.id"), @Mapping(target = "employeeName", source = "entity.name") })
@Mapping(target="divisionId",source="entity.division.id"),
@Mapping(target="divisionName",source="entity.division.name"),
@Mapping(target="employeeId",source="entity.id"),
@Mapping(target="employeeName",source="entity.name")
})
EmployeeDTO employeeToEmployeeDTO(Employee entity); EmployeeDTO employeeToEmployeeDTO(Employee entity);
@Mappings({ @Mappings({ @Mapping(target = "id", source = "dto.employeeId"), @Mapping(target = "name", source = "dto.employeeName") })
@Mapping(target="id",source="dto.employeeId"),
@Mapping(target="name",source="dto.employeeName"),
@Mapping(target="division",expression="java(new org.baeldung.entity.Division(dto.getDivisionId(),dto.getDivisionName()))")
})
Employee employeeDTOtoEmployee(EmployeeDTO dto); Employee employeeDTOtoEmployee(EmployeeDTO dto);
DivisionDTO divisionToDivisionDTO(Division entity);
Division divisionDTOtoDivision(DivisionDTO dto);
} }

View File

@ -8,6 +8,7 @@ import org.mapstruct.Mapper;
public interface SimpleSourceDestinationMapper { public interface SimpleSourceDestinationMapper {
SimpleDestination sourceToDestination(SimpleSource source); SimpleDestination sourceToDestination(SimpleSource source);
SimpleSource destinationToSource(SimpleDestination destination); SimpleSource destinationToSource(SimpleDestination destination);
} }

View File

@ -4,10 +4,11 @@ import org.baeldung.dto.SimpleSource;
import org.baeldung.entity.SimpleDestination; import org.baeldung.entity.SimpleDestination;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@Mapper(componentModel="spring") @Mapper(componentModel = "spring")
public interface SimpleSourceDestinationSpringMapper { public interface SimpleSourceDestinationSpringMapper {
SimpleDestination sourceToDestination(SimpleSource source); SimpleDestination sourceToDestination(SimpleSource source);
SimpleSource destinationToSource(SimpleDestination destination); SimpleSource destinationToSource(SimpleDestination destination);
} }

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:component-scan base-package="org.baeldung" />
</beans>

View File

@ -1,7 +1,8 @@
package org.baeldung.mapper; package org.baeldung.mapper;
import static org.junit.Assert.*; import static org.junit.Assert.assertEquals;
import org.baeldung.dto.DivisionDTO;
import org.baeldung.dto.EmployeeDTO; import org.baeldung.dto.EmployeeDTO;
import org.baeldung.entity.Division; import org.baeldung.entity.Division;
import org.baeldung.entity.Employee; import org.baeldung.entity.Employee;
@ -11,38 +12,57 @@ import org.mapstruct.factory.Mappers;
public class EmployeeMapperTest { public class EmployeeMapperTest {
@Test @Test
public void givenEmployeeDTOtoEmployee_whenMaps_thenCorrect(){ public void givenEmployeeDTOwithDiffNametoEmployee_whenMaps_thenCorrect() {
EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class); EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class);
EmployeeDTO dto = new EmployeeDTO(); EmployeeDTO dto = new EmployeeDTO();
dto.setDivisionId(1);
dto.setDivisionName("IT Division");
dto.setEmployeeId(1); dto.setEmployeeId(1);
dto.setEmployeeName("John"); dto.setEmployeeName("John");
Employee entity = mapper.employeeDTOtoEmployee(dto); Employee entity = mapper.employeeDTOtoEmployee(dto);
assertEquals(dto.getDivisionId(), entity.getDivision().getId()); assertEquals(dto.getEmployeeId(), entity.getId());
assertEquals(dto.getDivisionName(), entity.getDivision().getName()); assertEquals(dto.getEmployeeName(), entity.getName());
assertEquals(dto.getEmployeeId(),entity.getId());
assertEquals(dto.getEmployeeName(),entity.getName());
} }
@Test @Test
public void givenEmployeetoEmployeeDTO_whenMaps_thenCorrect(){ public void givenEmployeewithDiffNametoEmployeeDTO_whenMaps_thenCorrect() {
EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class); EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class);
Employee entity = new Employee(); Employee entity = new Employee();
entity.setDivision(new Division(1,"IT Division"));
entity.setId(1); entity.setId(1);
entity.setName("John"); entity.setName("John");
EmployeeDTO dto = mapper.employeeToEmployeeDTO(entity); EmployeeDTO dto = mapper.employeeToEmployeeDTO(entity);
assertEquals(dto.getDivisionId(), entity.getDivision().getId()); assertEquals(dto.getEmployeeId(), entity.getId());
assertEquals(dto.getDivisionName(), entity.getDivision().getName()); assertEquals(dto.getEmployeeName(), entity.getName());
assertEquals(dto.getEmployeeId(),entity.getId()); }
assertEquals(dto.getEmployeeName(),entity.getName());
@Test
public void givenEmployeeDTOwithNestedMappingToEmployee_whenMaps_thenCorrect() {
EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class);
EmployeeDTO dto = new EmployeeDTO();
dto.setDivision(new DivisionDTO(1, "Division1"));
Employee entity = mapper.employeeDTOtoEmployee(dto);
assertEquals(dto.getDivision().getId(), entity.getDivision().getId());
assertEquals(dto.getDivision().getName(), entity.getDivision().getName());
}
@Test
public void givenEmployeeWithNestedMappingToEmployeeDTO_whenMaps_thenCorrect() {
EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class);
Employee entity = new Employee();
entity.setDivision(new Division(1, "Division1"));
EmployeeDTO dto = mapper.employeeToEmployeeDTO(entity);
assertEquals(dto.getDivision().getId(), entity.getDivision().getId());
assertEquals(dto.getDivision().getName(), entity.getDivision().getName());
} }
} }

View File

@ -11,15 +11,13 @@ public class SimpleSourceDestinationMapperTest {
@Test @Test
public void givenSimpleSourceToSimpleDestination_whenMaps_thenCorrect() { public void givenSimpleSourceToSimpleDestination_whenMaps_thenCorrect() {
SimpleSourceDestinationMapper simpleSourceDestinationMapper = Mappers SimpleSourceDestinationMapper simpleSourceDestinationMapper = Mappers.getMapper(SimpleSourceDestinationMapper.class);
.getMapper(SimpleSourceDestinationMapper.class);
SimpleSource simpleSource = new SimpleSource(); SimpleSource simpleSource = new SimpleSource();
simpleSource.setName("SourceName"); simpleSource.setName("SourceName");
simpleSource.setDescription("SourceDescription"); simpleSource.setDescription("SourceDescription");
SimpleDestination destination = SimpleDestination destination = simpleSourceDestinationMapper.sourceToDestination(simpleSource);
simpleSourceDestinationMapper.sourceToDestination(simpleSource);
assertEquals(simpleSource.getName(), destination.getName()); assertEquals(simpleSource.getName(), destination.getName());
assertEquals(simpleSource.getDescription(), destination.getDescription()); assertEquals(simpleSource.getDescription(), destination.getDescription());
@ -27,15 +25,13 @@ public class SimpleSourceDestinationMapperTest {
@Test @Test
public void givenSimpleDestinationToSourceDestination_whenMaps_thenCorrect() { public void givenSimpleDestinationToSourceDestination_whenMaps_thenCorrect() {
SimpleSourceDestinationMapper simpleSourceDestinationMapper = Mappers SimpleSourceDestinationMapper simpleSourceDestinationMapper = Mappers.getMapper(SimpleSourceDestinationMapper.class);
.getMapper(SimpleSourceDestinationMapper.class);
SimpleDestination destination = new SimpleDestination(); SimpleDestination destination = new SimpleDestination();
destination.setName("DestinationName"); destination.setName("DestinationName");
destination.setDescription("DestinationDescription"); destination.setDescription("DestinationDescription");
SimpleSource source = SimpleSource source = simpleSourceDestinationMapper.destinationToSource(destination);
simpleSourceDestinationMapper.destinationToSource(destination);
assertEquals(destination.getName(), source.getName()); assertEquals(destination.getName(), source.getName());
assertEquals(destination.getDescription(), source.getDescription()); assertEquals(destination.getDescription(), source.getDescription());

View File

@ -0,0 +1,45 @@
package org.baeldung.mapper;
import static org.junit.Assert.assertEquals;
import org.baeldung.dto.SimpleSource;
import org.baeldung.entity.SimpleDestination;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/applicationContext.xml")
public class SimpleSourceDestinationSpringMapperTest {
@Autowired
private SimpleSourceDestinationSpringMapper simpleSourceDestinationSpringMapper;
@Test
public void givenSimpleSourceToSimpleDestination_whenMaps_thenCorrect() {
SimpleSource simpleSource = new SimpleSource();
simpleSource.setName("SourceName");
simpleSource.setDescription("SourceDescription");
SimpleDestination destination = simpleSourceDestinationSpringMapper.sourceToDestination(simpleSource);
assertEquals(simpleSource.getName(), destination.getName());
assertEquals(simpleSource.getDescription(), destination.getDescription());
}
@Test
public void givenSimpleDestinationToSourceDestination_whenMaps_thenCorrect() {
SimpleDestination destination = new SimpleDestination();
destination.setName("DestinationName");
destination.setDescription("DestinationDescription");
SimpleSource source = simpleSourceDestinationSpringMapper.destinationToSource(destination);
assertEquals(destination.getName(), source.getName());
assertEquals(destination.getDescription(), source.getDescription());
}
}