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

@ -2,41 +2,32 @@ package org.baeldung.dto;
public class EmployeeDTO { 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;
} }
public void setEmployeeId(int employeeId) { public void setEmployeeId(int employeeId) {
this.employeeId = employeeId; this.employeeId = employeeId;
} }
public String getEmployeeName() { public String getEmployeeName() {
return employeeName; return employeeName;
} }
public void setEmployeeName(String employeeName) { public void setEmployeeName(String employeeName) {
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

@ -2,23 +2,23 @@ package org.baeldung.dto;
public class SimpleSource { public class SimpleSource {
private String name; private String name;
private String description; private String description;
public String getName() {
return name;
}
public void setName(String name) { public String getName() {
this.name = name; return name;
} }
public String getDescription() { public void setName(String name) {
return description; this.name = name;
} }
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public void setDescription(String description) {
this.description = description;
}
} }

View File

@ -2,32 +2,32 @@ package org.baeldung.entity;
public class Division { public class Division {
public Division() { public Division() {
} }
public Division(int id, String name) { public Division(int id, String name) {
super(); super();
this.id = id; this.id = id;
this.name = name; this.name = name;
} }
private int id; private int id;
private String name; private String name;
public int getId() { public int getId() {
return id; return id;
} }
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
} }

View File

@ -2,32 +2,32 @@ package org.baeldung.entity;
public class Employee { public class Employee {
private int id; private int id;
private String name; private String name;
private Division division; private Division division;
public int getId() { public int getId() {
return id; return id;
} }
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public Division getDivision() { public Division getDivision() {
return division; return division;
} }
public void setDivision(Division division) { public void setDivision(Division division) {
this.division = division; this.division = division;
} }
} }

View File

@ -2,23 +2,23 @@ package org.baeldung.entity;
public class SimpleDestination { public class SimpleDestination {
private String name; private String name;
private String description; private String description;
public String getName() {
return name;
}
public void setName(String name) { public String getName() {
this.name = name; return name;
} }
public String getDescription() { public void setName(String name) {
return description; this.name = name;
} }
public void setDescription(String description) { public String getDescription() {
this.description = description; return description;
} }
public void setDescription(String description) {
this.description = description;
}
} }

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"), EmployeeDTO employeeToEmployeeDTO(Employee entity);
@Mapping(target="divisionName",source="entity.division.name"),
@Mapping(target="employeeId",source="entity.id"), @Mappings({ @Mapping(target = "id", source = "dto.employeeId"), @Mapping(target = "name", source = "dto.employeeName") })
@Mapping(target="employeeName",source="entity.name") Employee employeeDTOtoEmployee(EmployeeDTO dto);
})
EmployeeDTO employeeToEmployeeDTO(Employee entity); DivisionDTO divisionToDivisionDTO(Division entity);
@Mappings({ Division divisionDTOtoDivision(DivisionDTO dto);
@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);
} }

View File

@ -7,7 +7,8 @@ import org.mapstruct.Mapper;
@Mapper @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;
@ -9,40 +10,59 @@ import org.junit.Test;
import org.mapstruct.factory.Mappers; 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.setEmployeeId(1);
dto.setDivisionName("IT Division"); dto.setEmployeeName("John");
dto.setEmployeeId(1);
dto.setEmployeeName("John"); Employee entity = mapper.employeeDTOtoEmployee(dto);
Employee entity = mapper.employeeDTOtoEmployee(dto); assertEquals(dto.getEmployeeId(), entity.getId());
assertEquals(dto.getEmployeeName(), entity.getName());
assertEquals(dto.getDivisionId(), entity.getDivision().getId()); }
assertEquals(dto.getDivisionName(), entity.getDivision().getName());
assertEquals(dto.getEmployeeId(),entity.getId()); @Test
assertEquals(dto.getEmployeeName(),entity.getName()); public void givenEmployeewithDiffNametoEmployeeDTO_whenMaps_thenCorrect() {
} EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class);
@Test Employee entity = new Employee();
public void givenEmployeetoEmployeeDTO_whenMaps_thenCorrect(){ entity.setId(1);
EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class); entity.setName("John");
Employee entity = new Employee(); EmployeeDTO dto = mapper.employeeToEmployeeDTO(entity);
entity.setDivision(new Division(1,"IT Division"));
entity.setId(1); assertEquals(dto.getEmployeeId(), entity.getId());
entity.setName("John"); assertEquals(dto.getEmployeeName(), entity.getName());
}
EmployeeDTO dto = mapper.employeeToEmployeeDTO(entity);
@Test
assertEquals(dto.getDivisionId(), entity.getDivision().getId()); public void givenEmployeeDTOwithNestedMappingToEmployee_whenMaps_thenCorrect() {
assertEquals(dto.getDivisionName(), entity.getDivision().getName()); EmployeeMapper mapper = Mappers.getMapper(EmployeeMapper.class);
assertEquals(dto.getEmployeeId(),entity.getId());
assertEquals(dto.getEmployeeName(),entity.getName()); 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

@ -9,36 +9,32 @@ import org.mapstruct.factory.Mappers;
public class SimpleSourceDestinationMapperTest { 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 = simpleSourceDestinationMapper.sourceToDestination(simpleSource);
SimpleDestination destination =
simpleSourceDestinationMapper.sourceToDestination(simpleSource); assertEquals(simpleSource.getName(), destination.getName());
assertEquals(simpleSource.getDescription(), destination.getDescription());
assertEquals(simpleSource.getName(), destination.getName()); }
assertEquals(simpleSource.getDescription(), destination.getDescription());
} @Test
public void givenSimpleDestinationToSourceDestination_whenMaps_thenCorrect() {
@Test SimpleSourceDestinationMapper simpleSourceDestinationMapper = Mappers.getMapper(SimpleSourceDestinationMapper.class);
public void givenSimpleDestinationToSourceDestination_whenMaps_thenCorrect() {
SimpleSourceDestinationMapper simpleSourceDestinationMapper = Mappers SimpleDestination destination = new SimpleDestination();
.getMapper(SimpleSourceDestinationMapper.class); destination.setName("DestinationName");
destination.setDescription("DestinationDescription");
SimpleDestination destination = new SimpleDestination();
destination.setName("DestinationName"); SimpleSource source = simpleSourceDestinationMapper.destinationToSource(destination);
destination.setDescription("DestinationDescription");
assertEquals(destination.getName(), source.getName());
SimpleSource source = assertEquals(destination.getDescription(), source.getDescription());
simpleSourceDestinationMapper.destinationToSource(destination); }
assertEquals(destination.getName(), source.getName());
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());
}
}