Skip to content

Commit bd253cb

Browse files
committed
Start of better support for insertMultiple with Generated Keys in MyBatis
1 parent b67ea69 commit bd253cb

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/main/java/org/mybatis/dynamic/sql/util/SqlProviderAdapter.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
2424
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
2525

26+
import java.util.List;
27+
import java.util.Map;
28+
import java.util.stream.Collectors;
29+
2630
/**
2731
* Adapter for use with MyBatis SQL provider annotations.
2832
*
@@ -47,6 +51,19 @@ public String insertMultiple(MultiRowInsertStatementProvider<?> insertStatement)
4751
return insertStatement.getInsertStatement();
4852
}
4953

54+
public String insertMultipleWithGeneratedKeys(Map<String, Object> parameterMap) {
55+
List<String> entries = parameterMap.entrySet().stream()
56+
.filter(e -> e.getKey().startsWith("param")) //$NON-NLS-1$
57+
.filter(e -> e.getValue() instanceof String)
58+
.map(e -> (String) e.getValue())
59+
.collect(Collectors.toList());
60+
if (entries.size() == 1) {
61+
return entries.get(0);
62+
} else {
63+
throw new RuntimeException("The parameters for insertMultipleWithGeneratedKeys must contain exactly one parameter of type String");
64+
}
65+
}
66+
5067
public String insertSelect(InsertSelectStatementProvider insertStatement) {
5168
return insertStatement.getInsertStatement();
5269
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/mybatis3/MapperSupportFunctions.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ fun <T> insertMultiple(
6767
) =
6868
mapper(SqlBuilder.insertMultiple(records).into(table, completer))
6969

70+
fun <T> insertMultipleWithGeneratedKeys(
71+
mapper: (String, List<T>) -> Int,
72+
records: Collection<T>,
73+
table: SqlTable,
74+
completer: MultiRowInsertCompleter<T>
75+
): Int =
76+
with(insertMultiple(records).into(table, completer)) {
77+
mapper(insertStatement, this.records)
78+
}
79+
7080
fun insertSelect(
7181
mapper: (InsertSelectStatementProvider) -> Int,
7282
table: SqlTable,

0 commit comments

Comments
 (0)