Skip to content

Commit dfe5d5c

Browse files
committed
Batch insert for Kotlin
1 parent 6b4b900 commit dfe5d5c

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/spring/NamedParameterJdbcTemplateExtensions.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider
2828
import org.mybatis.dynamic.sql.select.CountDSL
2929
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider
3030
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider
31+
import org.mybatis.dynamic.sql.util.kotlin.BatchInsertCompleter
3132
import org.mybatis.dynamic.sql.util.kotlin.CountCompleter
3233
import org.mybatis.dynamic.sql.util.kotlin.DeleteCompleter
3334
import org.mybatis.dynamic.sql.util.kotlin.GeneralInsertCompleter
@@ -66,6 +67,12 @@ fun NamedParameterJdbcTemplate.deleteFrom(table: SqlTable, completer: DeleteComp
6667
fun <T> NamedParameterJdbcTemplate.insert(insertStatement: BatchInsert<T>): IntArray =
6768
batchUpdate(insertStatement.insertStatementSQL, SqlParameterSourceUtils.createBatch(insertStatement.records))
6869

70+
fun <T> NamedParameterJdbcTemplate.insert(vararg records: T) =
71+
insert(records.asList())
72+
73+
fun <T> NamedParameterJdbcTemplate.insert(records: List<T>) =
74+
BatchInsertHelper(records, this)
75+
6976
// single record insert
7077
fun <T> NamedParameterJdbcTemplate.insert(insertStatement: InsertStatementProvider<T>) =
7178
update(insertStatement.insertStatement, BeanPropertySqlParameterSource(insertStatement.record))
@@ -204,6 +211,12 @@ class SelectOneMapperGatherer(
204211
template.selectOne(selectStatement, rowMapper)
205212
}
206213

214+
@MyBatisDslMarker
215+
class BatchInsertHelper<T>(private val records: List<T>, private val template: NamedParameterJdbcTemplate) {
216+
fun into(table: SqlTable, completer: BatchInsertCompleter<T>) =
217+
template.insert(SqlBuilder.insert(records).into(table, completer))
218+
}
219+
207220
@MyBatisDslMarker
208221
class MultiRowInsertHelper<T>(private val records: List<T>, private val template: NamedParameterJdbcTemplate) {
209222
fun into(table: SqlTable, completer: MultiRowInsertCompleter<T>) =

src/test/kotlin/examples/kotlin/spring/canonical/CanonicalSpringKotlinTemplateDirectTest.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,24 @@ class CanonicalSpringKotlinTemplateDirectTest {
226226
assertThat(rows).isEqualTo(2)
227227
}
228228

229+
@Test
229230
fun testBatchInsert() {
230-
TODO()
231+
val record1 = PersonRecord(100, "Joe", LastName("Jones"), Date(), true, "Developer", 1)
232+
val record2 = PersonRecord(101, "Sarah", LastName("Smith"), Date(), true, "Architect", 2)
233+
234+
val rows = template.insert(record1, record2).into(Person) {
235+
map(id).toProperty("id")
236+
map(firstName).toProperty("firstName")
237+
map(lastName).toProperty("lastNameAsString")
238+
map(birthDate).toProperty("birthDate")
239+
map(employed).toProperty("employedAsString")
240+
map(occupation).toProperty("occupation")
241+
map(addressId).toProperty("addressId")
242+
}
243+
244+
assertThat(rows).hasSize(2)
245+
assertThat(rows[0]).isEqualTo(1)
246+
assertThat(rows[1]).isEqualTo(1)
231247
}
232248

233249
fun testGeneralInsertWithGeneratedKey() {

0 commit comments

Comments
 (0)