示例堆栈:Spring Data R2dbc 1.0.0.RELEASE,R2dbc Mssql 0.8,完整代码为here。
初始化脚本:
use tempdb;
IF OBJECT_ID(N'dbo.posts',N'U') IS NULL
BEGIN
CREATE TABLE posts (
id BIGINT NOT NULL IDENTITY(1,1) PRIMARY KEY,title VARCHAR (50) NOT NULL,content VARCHAR (50) NOT NULL,createdAt DATETIME,updatedAt DATETIME
)
END;
保存数据并从DataInitializer
获取生成的密钥时。
@Component
@Slf4j
class DataInitializer {
private final Databaseclient databaseclient;
public DataInitializer(Databaseclient databaseclient) {
this.databaseclient = databaseclient;
}
@EventListener(value = ContextRefreshedEvent.class)
public void init() {
log.info("start data initialization...");
this.databaseclient.delete().from("posts")
.then().
and(
this.databaseclient.insert()
.into("posts")
//.nullValue("id",Integer.class)
.value("title","First post title")
.value("content","Content of my first post")
.map((r,m) -> r.get( 0,BigDecimal.class)).all()
.log()
)
.thenmany(
this.databaseclient.select()
.from("posts")
.orderBy(Sort.by(desc("id")))
.as(Post.class)
.fetch()
.all()
.log()
)
.subscribe(null,null,() -> log.info("initialization is done..."));
}
}
如果我在行Integer
中使用Long
或BigDecimal
而不是.map((r,BigDecimal.class)).all()
,则会出现错误,表明无法解码类型为[java。 lang.Long],名称为[GENERATED_KEYS]服务器类型为[numeric] ,它不是架构脚本中定义的bigint
,我必须使用BigDecimal
使其正常工作。 / p>