我正在尝试使用 Kotlin Exposed 将记录批量插入到 SQL 表中。我已经按照公开文档设置了代码,但是,正在执行的 SQL 语句是单独的插入语句而不是 1 个批量插入语句。
位于此处的文档: https: //github.com/JetBrains/Exposed/wiki/DSL 有关批量插入的内容如下:
批量插入
批量插入允许在一个 sql 语句中将实体列表映射到数据库原始数据中。它比一条一条插入效率更高,因为它只启动一条语句。这是一个例子:
val cityNames = listOf("Paris", "Moscow", "Helsinki")
val allCitiesID = cities.batchInsert(cityNames) { name ->
this[cities.name] = name
}
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
val mappings: List<Triple<String, String, String>> = listOf(triple1, triple2, triple3)
transaction {
TableName.batchInsert(mappings) {
this[TableName.value1] = it.first
this[TableName.value2] = it.second
this[TableName.value3] = it.third
}
}
Run Code Online (Sandbox Code Playgroud)
我期望看到打印的是 1 个批量插入语句,其语法如下
INSERT INTO TableName (value1, value2, value3) values
(triple1value1, triple1value2, triple1value3),
(triple2value1, triple2value2, triple2value3),
(triple3value1, triple3value2, triple3value3), ...
Run Code Online (Sandbox Code Playgroud)
但它使用以下语法打印 3 个单独的插入语句
INSERT INTO TableName (value1, value2, value3) values (triple1value1, triple1value2, triple1value3)
INSERT INTO TableName (value1, value2, value3) values (triple2value1, triple2value2, triple2value3)
INSERT INTO TableName (value1, value2, value3) values (triple3value1, triple3value2, triple3value3)
Run Code Online (Sandbox Code Playgroud)
由于这似乎是记录的批量插入的正确方法,我在这里做错了什么?
文档解释:
注意:batchInsert 函数在与数据库交互时仍会创建多个 INSERT 语句。您很可能希望将其与相关 JDBC 驱动程序的 rewriteBatchedInserts=true (或 rewriteBatchedStatements=true)选项结合起来,这会将它们转换为单个bulkInsert。您可以在此处找到有关 MySQL 和 PostgreSQL 的此选项的文档。
https://github.com/JetBrains/Exposed/wiki/DSL#batch-insert
| 归档时间: |
|
| 查看次数: |
8469 次 |
| 最近记录: |