diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d29b53c..5000abb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - mapper: [Manual, MapStruct, Selma, JMapper, datus, Orika, ModelMapper, BULL, Dozer, ReMap] + mapper: [Manual, MapStruct, Selma, JMapper, datus, Orika, ModelMapper, BULL, Dozer, ReMap, SJF4J] steps: - uses: actions/checkout@v4.1.1 - name: Set up JDK ${{ env.JAVA_VERSION }} @@ -69,7 +69,7 @@ jobs: name: Prepare CSV Results run: | head -1 results_Manual.csv > results.csv - for mapper in Manual MapStruct Selma JMapper datus Orika ModelMapper BULL Dozer ReMap; do sed 1d results_${mapper}.csv >> results.csv; done + for mapper in Manual MapStruct Selma JMapper datus Orika ModelMapper BULL Dozer ReMap SJF4J; do sed 1d results_${mapper}.csv >> results.csv; done less results.csv - uses: actions/upload-artifact@v4 name: Upload CSV Results diff --git a/.gitignore b/.gitignore index ea331b5..cdd86c7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ target/ .classpath .settings/ .idea/ -*.iml \ No newline at end of file +*.iml +dependency-reduced-pom.xml \ No newline at end of file diff --git a/pom.xml b/pom.xml index a9d3027..9dda8c6 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,7 @@ 3.0.4 1.5.0 4.3.7 + 1.3.1 6.1.0 2.0.9 4.0.0 @@ -117,6 +118,17 @@ ${version.remap} + + org.sjf4j + sjf4j + ${version.sjf4j} + + + org.sjf4j + sjf4j-processor + ${version.sjf4j} + + org.junit.jupiter junit-jupiter-engine diff --git a/readme.md b/readme.md index 3d73602..1ac65c2 100644 --- a/readme.md +++ b/readme.md @@ -21,6 +21,7 @@ JMH is developed by the OpenJDK team. - [BULL](https://github.com/HotelsDotCom/bull) - [datus](https://github.com/roookeee/datus) - [ReMap](https://github.com/remondis-it/remap) +- [SJF4J](https://sjf4j.org/) ## Contributing to benchmark diff --git a/src/main/java/com/javaetmoi/benchmark/MapperBenchmark.java b/src/main/java/com/javaetmoi/benchmark/MapperBenchmark.java index 2242f2b..c4c031c 100644 --- a/src/main/java/com/javaetmoi/benchmark/MapperBenchmark.java +++ b/src/main/java/com/javaetmoi/benchmark/MapperBenchmark.java @@ -11,6 +11,7 @@ import com.javaetmoi.benchmark.mapping.mapper.orika.OrikaMapper; import com.javaetmoi.benchmark.mapping.mapper.remappe.ReMappeMapper; import com.javaetmoi.benchmark.mapping.mapper.selma.SelmaMapper; +import com.javaetmoi.benchmark.mapping.mapper.sjf4j.Sjf4jMapper; import com.javaetmoi.benchmark.mapping.model.dto.OrderDTO; import com.javaetmoi.benchmark.mapping.model.entity.Order; import com.javaetmoi.benchmark.mapping.model.entity.OrderFactory; @@ -27,7 +28,7 @@ @State(Scope.Benchmark) public class MapperBenchmark { - @Param({"Manual", "MapStruct", "Selma", "JMapper", "datus", "Orika", "ModelMapper", "BULL", "Dozer", "ReMap"}) + @Param({"Manual", "MapStruct", "Selma", "JMapper", "datus", "Orika", "ModelMapper", "BULL", "Dozer", "ReMap", "SJF4J"}) private String type; private OrderMapper mapper; @@ -66,6 +67,9 @@ public void setup() { case "ReMap": mapper = new ReMappeMapper(); break; + case "SJF4J": + mapper = new Sjf4jMapper(); + break; default: throw new IllegalStateException("Unknown type: " + type); } diff --git a/src/main/java/com/javaetmoi/benchmark/mapping/mapper/sjf4j/Sjf4jMapper.java b/src/main/java/com/javaetmoi/benchmark/mapping/mapper/sjf4j/Sjf4jMapper.java new file mode 100644 index 0000000..9395070 --- /dev/null +++ b/src/main/java/com/javaetmoi/benchmark/mapping/mapper/sjf4j/Sjf4jMapper.java @@ -0,0 +1,17 @@ +package com.javaetmoi.benchmark.mapping.mapper.sjf4j; + +import com.javaetmoi.benchmark.mapping.mapper.OrderMapper; +import com.javaetmoi.benchmark.mapping.model.dto.OrderDTO; +import com.javaetmoi.benchmark.mapping.model.entity.Order; +import org.sjf4j.compiled.CompiledNodes; + + +public class Sjf4jMapper implements OrderMapper { + + private final Sjf4jOrderMapper mapper = CompiledNodes.of(Sjf4jOrderMapper.class); + + @Override + public OrderDTO map(Order source) { + return mapper.map(source); + } +} diff --git a/src/main/java/com/javaetmoi/benchmark/mapping/mapper/sjf4j/Sjf4jOrderMapper.java b/src/main/java/com/javaetmoi/benchmark/mapping/mapper/sjf4j/Sjf4jOrderMapper.java new file mode 100644 index 0000000..a4be958 --- /dev/null +++ b/src/main/java/com/javaetmoi/benchmark/mapping/mapper/sjf4j/Sjf4jOrderMapper.java @@ -0,0 +1,26 @@ +package com.javaetmoi.benchmark.mapping.mapper.sjf4j; + +import com.javaetmoi.benchmark.mapping.mapper.OrderMapper; +import com.javaetmoi.benchmark.mapping.model.dto.OrderDTO; +import com.javaetmoi.benchmark.mapping.model.dto.ProductDTO; +import com.javaetmoi.benchmark.mapping.model.entity.Order; +import com.javaetmoi.benchmark.mapping.model.entity.Product; +import org.sjf4j.annotation.mapper.CompiledMapper; +import org.sjf4j.annotation.mapper.Mapping; +import org.sjf4j.annotation.mapper.Mappings; + +@CompiledMapper +public interface Sjf4jOrderMapper extends OrderMapper { + + @Mappings({ + @Mapping(target = "customerName", source = "$.customer.name"), + @Mapping(target = "billingStreetAddress", source = "$.customer.billingAddress.street"), + @Mapping(target = "billingCity", source = "$.customer.billingAddress.city"), + @Mapping(target = "shippingStreetAddress", source = "$.customer.shippingAddress.street"), + @Mapping(target = "shippingCity", source = "$.customer.shippingAddress.city"), + }) + OrderDTO map(Order source); + + ProductDTO productToProductDTO(Product product); + +} \ No newline at end of file