r2dbc - 批量插入支持
问题描述
我尝试使用 r2dbc 执行批量插入。
我已经从 Spring Boot 中看到 DatabaseClient ,这还不可能。我尝试使用 R2DBC SPIStatement
和and
方法来做到这一点,如下所示:
Mono.from(this.factory.create())
.map(connection -> connection.createStatement(insertSQL))
.map(statement -> {
lines.forEach(line -> {
statement
.add()
.bind(0, line.getId())
;
});
return statement;
})
.flatMap(statement -> Mono.from(statement.execute()));
我在日志上看到两个插入请求已完成。
2019-12-18 16:27:36.092 DEBUG [] 4133 --- [tor-tcp-epoll-1] io.r2dbc.postgresql.QUERY : Executing query: insert into table(id) values ($1)
2019-12-18 16:27:36.116 DEBUG [] 4133 --- [tor-tcp-epoll-1] i.r.p.client.ReactorNettyClient : Request: Bind{}
2019-12-18 16:27:36.126 DEBUG [] 4133 --- [tor-tcp-epoll-1] io.r2dbc.postgresql.QUERY : Executing query: insert into table(id) values ($1)
2019-12-18 16:27:36.130 DEBUG [] 4133 --- [tor-tcp-epoll-1] i.r.p.client.ReactorNettyClient : Request: Bind{}
是add
执行批量更新还是只运行两个请求?
谢谢。
解决方案
有点晚了,但总比我猜的好。我会说您的代码发出两个单独的请求。使用 DatabaseClient,我想自从提出问题以来它已经成熟:
Mono.from(connectionFactory.create())
.map(connection -> connection.createBatch())
.map(batch -> {
batch.add("delete from table1");
batch.add("delete from table2");
batch.add("delete from table3");
return batch.execute();
})
// Etc
运行上述程序时,将记录以下内容:
Query:["delete from table1","delete from table2","delete from table3"] Bindings:[]
推荐阅读
- angular - 为什么我的 Eclipse 控制台中有多个 Angular 语言服务器选项卡
- wso2 - 当我们在 WSO2 ESB 中安排任何任务时,我可以通过浏览器将任何参数传递给任务吗?
- sql - 如何获取日期集的(周数,周数)
- npm - npm 或纱线,`node-gyp 重建` npm 错误!退出状态 1
- python - 从输出中删除新行
- java - 从 MQTT 服务器接收消息时,Protobuf Java 方法 parseFrom() 挂起
- azure-machine-learning-studio - Azure 机器学习 FileDataSet 图像 - 分片/拆分到节点
- tree - 从java中的ArrayList构建平衡二叉搜索树
- python - 如何获取列表中项目的字典项目值?Python
- bash - 如何在bash中的数组中查找数字的倍数?