Skip to content

Commit bc2709a

Browse files
authored
Merge pull request arey#27 from mmaryo/add-remap-mapper
Add remap mapper
2 parents 18a4509 + 6b193c1 commit bc2709a

File tree

15 files changed

+124
-52
lines changed

15 files changed

+124
-52
lines changed

pom.xml

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616
<properties>
1717
<version.orika>1.5.4</version.orika>
1818
<version.dozer>6.5.0</version.dozer>
19-
<version.modelmapper>2.3.5</version.modelmapper>
20-
<version.mapstruct>1.3.0.Final</version.mapstruct>
19+
<version.modelmapper>2.3.8</version.modelmapper>
20+
<version.mapstruct>1.4.0.CR1</version.mapstruct>
2121
<version.selma>1.0</version.selma>
2222
<version.jmapper>1.6.1.CR2</version.jmapper>
23-
<version.jmh>1.19</version.jmh>
24-
<version.bull>1.6.5-jdk8</version.bull>
25-
<version.datus>1.4.0</version.datus>
26-
<version.junit>4.12</version.junit>
27-
<version.slf4j>1.7.22</version.slf4j>
23+
<version.jmh>1.25.2</version.jmh>
24+
<version.bull>1.7.2-jdk8</version.bull>
25+
<version.datus>1.5.0</version.datus>
26+
<version.remap>4.2.5</version.remap>
27+
<version.junit>4.13</version.junit>
28+
<version.slf4j>1.7.30</version.slf4j>
2829

2930
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3031
<javac.target>1.8</javac.target>
@@ -104,6 +105,12 @@
104105
<version>${version.jmapper}</version>
105106
</dependency>
106107

108+
<dependency>
109+
<groupId>com.remondis</groupId>
110+
<artifactId>remap</artifactId>
111+
<version>${version.remap}</version>
112+
</dependency>
113+
107114
<dependency>
108115
<groupId>junit</groupId>
109116
<artifactId>junit</artifactId>

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ JMH is developed by the OpenJDK team.
2020
- [JMapper](https://github.com/jmapper-framework/jmapper-core)
2121
- [BULL](https://github.com/HotelsDotCom/bull)
2222
- [datus](https://github.com/roookeee/datus)
23+
- [ReMap](https://github.com/remondis-it/remap)
2324

2425
## Contributing to benchmark
2526

src/main/java/com/javaetmoi/benchmark/MapperBenchmark.java

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
package com.javaetmoi.benchmark;
22

3-
import java.util.Collection;
4-
import java.util.concurrent.TimeUnit;
5-
3+
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
64
import com.javaetmoi.benchmark.mapping.mapper.bull.BullMapper;
75
import com.javaetmoi.benchmark.mapping.mapper.datus.DatusMapper;
6+
import com.javaetmoi.benchmark.mapping.mapper.dozer.DozerMapper;
7+
import com.javaetmoi.benchmark.mapping.mapper.jmapper.JMapperMapper;
8+
import com.javaetmoi.benchmark.mapping.mapper.manual.ManualMapper;
9+
import com.javaetmoi.benchmark.mapping.mapper.mapstruct.MapStructMapper;
10+
import com.javaetmoi.benchmark.mapping.mapper.modelmapper.ModelMapper;
11+
import com.javaetmoi.benchmark.mapping.mapper.orika.OrikaMapper;
12+
import com.javaetmoi.benchmark.mapping.mapper.remappe.ReMappeMapper;
13+
import com.javaetmoi.benchmark.mapping.mapper.selma.SelmaMapper;
814
import com.javaetmoi.benchmark.mapping.model.dto.OrderDTO;
915
import com.javaetmoi.benchmark.mapping.model.entity.Order;
16+
import com.javaetmoi.benchmark.mapping.model.entity.OrderFactory;
1017
import org.openjdk.jmh.annotations.*;
1118
import org.openjdk.jmh.results.Result;
1219
import org.openjdk.jmh.results.RunResult;
@@ -15,28 +22,19 @@
1522
import org.openjdk.jmh.runner.options.Options;
1623
import org.openjdk.jmh.runner.options.OptionsBuilder;
1724

18-
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
19-
import com.javaetmoi.benchmark.mapping.mapper.dozer.DozerMapper;
20-
import com.javaetmoi.benchmark.mapping.mapper.jmapper.JMapperMapper;
21-
import com.javaetmoi.benchmark.mapping.mapper.manual.ManualMapper;
22-
import com.javaetmoi.benchmark.mapping.mapper.mapstruct.MapStructMapper;
23-
import com.javaetmoi.benchmark.mapping.mapper.modelmapper.ModelMapper;
24-
import com.javaetmoi.benchmark.mapping.mapper.orika.OrikaMapper;
25-
import com.javaetmoi.benchmark.mapping.mapper.selma.SelmaMapper;
26-
import com.javaetmoi.benchmark.mapping.model.entity.OrderFactory;
27-
import org.openjdk.jmh.runner.options.TimeValue;
25+
import java.util.Collection;
2826

2927
@State(Scope.Benchmark)
3028
public class MapperBenchmark {
3129

32-
@Param({"Manual", "MapStruct", "Selma", "JMapper", "datus", "Orika", "ModelMapper", "BULL", "Dozer"})
30+
@Param({"Manual", "MapStruct", "Selma", "JMapper", "datus", "Orika", "ModelMapper", "BULL", "Dozer", "ReMap"})
3331
private String type;
3432

3533
private OrderMapper mapper;
3634
private Order order;
3735

3836
@Setup(Level.Trial)
39-
public void setup(){
37+
public void setup() {
4038
switch (type) {
4139
case "Dozer":
4240
mapper = new DozerMapper();
@@ -65,13 +63,16 @@ public void setup(){
6563
case "datus":
6664
mapper = new DatusMapper();
6765
break;
66+
case "ReMap":
67+
mapper = new ReMappeMapper();
68+
break;
6869
default:
6970
throw new IllegalStateException("Unknown type: " + type);
7071
}
7172
}
7273

7374
@Setup(Level.Iteration)
74-
public void preInit(){
75+
public void preInit() {
7576
order = OrderFactory.buildOrder();
7677
}
7778

@@ -82,21 +83,21 @@ public OrderDTO mapper() {
8283

8384
public static void main(String... args) throws Exception {
8485
Options opts = new OptionsBuilder()
85-
.include(MapperBenchmark.class.getSimpleName())
86-
.warmupIterations(5)
87-
.measurementIterations(5)
88-
.jvmArgs("-server")
89-
.forks(1)
90-
.resultFormat(ResultFormatType.TEXT)
91-
.build();
86+
.include(MapperBenchmark.class.getSimpleName())
87+
.warmupIterations(5)
88+
.measurementIterations(5)
89+
.jvmArgs("-server")
90+
.forks(1)
91+
.resultFormat(ResultFormatType.TEXT)
92+
.build();
9293

9394
Collection<RunResult> results = new Runner(opts).run();
9495
for (RunResult result : results) {
9596
Result<?> r = result.getPrimaryResult();
9697
System.out.println("API replied benchmark score: "
97-
+ r.getScore() + " "
98-
+ r.getScoreUnit() + " over "
99-
+ r.getStatistics().getN() + " iterations");
98+
+ r.getScore() + " "
99+
+ r.getScoreUnit() + " over "
100+
+ r.getStatistics().getN() + " iterations");
100101
}
101102
}
102103

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.javaetmoi.benchmark.mapping.mapper.remappe;
2+
3+
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
4+
import com.javaetmoi.benchmark.mapping.model.dto.OrderDTO;
5+
import com.javaetmoi.benchmark.mapping.model.dto.ProductDTO;
6+
import com.javaetmoi.benchmark.mapping.model.entity.Address;
7+
import com.javaetmoi.benchmark.mapping.model.entity.Customer;
8+
import com.javaetmoi.benchmark.mapping.model.entity.Order;
9+
import com.javaetmoi.benchmark.mapping.model.entity.Product;
10+
import com.remondis.remap.Mapper;
11+
import com.remondis.remap.Mapping;
12+
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.Objects;
16+
17+
18+
public final class ReMappeMapper implements OrderMapper {
19+
20+
private final Mapper<Product, ProductDTO> mapperToDtoProduct = Mapping
21+
.from(Product.class)
22+
.to(ProductDTO.class)
23+
.mapper();
24+
25+
private final Mapper<Order, OrderDTO> mapperToDto = Mapping
26+
.from(Order.class)
27+
.to(OrderDTO.class)
28+
.replace(Order::getCustomer, OrderDTO::getCustomerName).withSkipWhenNull(customer -> customer.getName())
29+
.replace(Order::getCustomer, OrderDTO::getBillingStreetAddress).withSkipWhenNull(customer -> {
30+
Address billingAddress = customer.getBillingAddress();
31+
return Objects.nonNull(billingAddress)
32+
? billingAddress.getStreet()
33+
: null;
34+
})
35+
.replace(Order::getCustomer, OrderDTO::getBillingCity).withSkipWhenNull(customer -> {
36+
Address billingAddress = customer.getBillingAddress();
37+
return Objects.nonNull(billingAddress)
38+
? billingAddress.getCity()
39+
: null;
40+
})
41+
.replace(Order::getCustomer, OrderDTO::getShippingStreetAddress).withSkipWhenNull(customer -> {
42+
Address shippingAddress = customer.getShippingAddress();
43+
return Objects.nonNull(shippingAddress)
44+
? shippingAddress.getStreet()
45+
: null;
46+
})
47+
.replace(Order::getCustomer, OrderDTO::getShippingCity).withSkipWhenNull(customer -> {
48+
Address shippingAddress = customer.getShippingAddress();
49+
return Objects.nonNull(shippingAddress)
50+
? shippingAddress.getCity()
51+
: null;
52+
})
53+
.useMapper(mapperToDtoProduct)
54+
.mapper();
55+
56+
@Override
57+
public OrderDTO map(Order source) {
58+
return mapperToDto.map(source);
59+
}
60+
61+
}

src/test/java/com/javaetmoi/benchmark/mapping/mapper/dozer/AbstractMapperTest.java renamed to src/test/java/com/javaetmoi/benchmark/mapping/mapper/AbstractMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.javaetmoi.benchmark.mapping.mapper.dozer;
1+
package com.javaetmoi.benchmark.mapping.mapper;
22

33

44
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;

src/test/java/com/javaetmoi/benchmark/mapping/mapper/dozer/BullMapperTest.java renamed to src/test/java/com/javaetmoi/benchmark/mapping/mapper/BullMapperTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.javaetmoi.benchmark.mapping.mapper.dozer;
1+
package com.javaetmoi.benchmark.mapping.mapper;
22

3-
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
43
import com.javaetmoi.benchmark.mapping.mapper.bull.BullMapper;
54

65
public class BullMapperTest extends AbstractMapperTest {

src/test/java/com/javaetmoi/benchmark/mapping/mapper/dozer/DatusMapperTest.java renamed to src/test/java/com/javaetmoi/benchmark/mapping/mapper/DatusMapperTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.javaetmoi.benchmark.mapping.mapper.dozer;
1+
package com.javaetmoi.benchmark.mapping.mapper;
22

3-
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
43
import com.javaetmoi.benchmark.mapping.mapper.datus.DatusMapper;
54

65
public class DatusMapperTest extends AbstractMapperTest {

src/test/java/com/javaetmoi/benchmark/mapping/mapper/dozer/DozerMapperTest.java renamed to src/test/java/com/javaetmoi/benchmark/mapping/mapper/DozerMapperTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.javaetmoi.benchmark.mapping.mapper.dozer;
1+
package com.javaetmoi.benchmark.mapping.mapper;
22

3-
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
3+
import com.javaetmoi.benchmark.mapping.mapper.dozer.DozerMapper;
44

55
public class DozerMapperTest extends AbstractMapperTest {
66

src/test/java/com/javaetmoi/benchmark/mapping/mapper/dozer/JMapperMapperTest.java renamed to src/test/java/com/javaetmoi/benchmark/mapping/mapper/JMapperMapperTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.javaetmoi.benchmark.mapping.mapper.dozer;
1+
package com.javaetmoi.benchmark.mapping.mapper;
22

3-
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
43
import com.javaetmoi.benchmark.mapping.mapper.jmapper.JMapperMapper;
54

65
public class JMapperMapperTest extends AbstractMapperTest {

src/test/java/com/javaetmoi/benchmark/mapping/mapper/dozer/ManualMapperTest.java renamed to src/test/java/com/javaetmoi/benchmark/mapping/mapper/ManualMapperTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.javaetmoi.benchmark.mapping.mapper.dozer;
1+
package com.javaetmoi.benchmark.mapping.mapper;
22

3-
import com.javaetmoi.benchmark.mapping.mapper.OrderMapper;
43
import com.javaetmoi.benchmark.mapping.mapper.manual.ManualMapper;
54

65
public class ManualMapperTest extends AbstractMapperTest {

0 commit comments

Comments
 (0)