【发布时间】:2021-01-02 07:11:38
【问题描述】:
我有一个场景,我的表有一个自动生成的 id 列,我需要将项目批量插入 db 并获取生成的 id。有什么办法可以实现吗?
这是我的桌子:
CREATE TABLE test_table (
`id` SERIAL NOT NULL,
`name` VARCHAR(100) NOT NULL,
`created_date` DATETIME NOT NULL,
PRIMARY KEY (`id`)
);
要将项目列表保存到此表中,我正在使用的代码:
String initialSql = "INSERT INTO test_table(`name`,`created_date`) VALUES ";
List<String> values =
dummyEntities.stream()
.map(dummyEntity -> "('" + dummyEntity.getName() + "','"
+ dummyEntity.getCreatedDate().atZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime().toString() + "')")
.collect(Collectors.toList());
String sqlToExecute = initialSql + String.join(",", values);
client.execute(sqlToExecute)
.//Then what?
生成的 SQL 语句(来自 DEBUG 日志):
2020-09-15 18:59:32.613 DEBUG 44801 --- [actor-tcp-nio-1] o.s.d.r2dbc.core.DefaultDatabaseClient : Executing SQL statement [INSERT INTO test_table(`name`,`created_date`) VALUES ('Abhi57','2020-09-15T13:29:29.951964'),('Abhi92','2020-09-15T13:29:29.952023')]
我什至尝试过使用ConnectionFactory,仍然没有任何线索
Mono.from(connectionFactory.create())
.map(Connection::createBatch)
.map(batch -> {
dummyEntities.forEach(dummyEntity -> {
String sql = String.format("INSERT INTO `test_table` (`name`,`created_date`) VALUES ('%s','%s');", dummyEntity.getName(),
dummyEntity.getCreatedDate().atZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime().toString());
batch.add(sql);
});
return batch;
})
.flatMap(batch -> Mono.from(batch.execute()))
.//Then what?
作为参考,dummyEntities 变量包含DummyEntity 对象的列表。 DummyEntity 类看起来像这样:
@Table("test_table")
public class DummyEntity implements Persistable<Long> {
@Id
@Column("id")
private Long id;
@Column("name")
private String name;
@Column("created_date")
private OffsetDateTime createdDate;
//Getter,Setter
@Override
public boolean isNew() {
return id == null;
}
}
使用的依赖:2.3.2.RELEASE
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
implementation 'dev.miku:r2dbc-mysql:0.8.2.RELEASE'
【问题讨论】:
-
您要查找的是
client.execute( ... ).all()记录在此处docs.spring.io/spring-data/r2dbc/docs/1.1.3.RELEASE/reference/…,具体取决于您获得不同对象的查询,但我认为您正在寻找的是all()。
标签: java mysql spring-boot spring-webflux spring-data-r2dbc