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