首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring R2DBC DatabaseClient.as(…)

Spring R2DBC DatabaseClient.as(…)
EN

Stack Overflow用户
提问于 2020-11-02 22:35:59
回答 1查看 2.3K关注 0票数 13

在我的spring-boot2.3应用程序中,我有一个使用DatabaseClient的简单数据方法

代码语言:javascript
复制
fun getCurrentTime(): Mono<LocalDateTime> =
    databaseClient
        .execute("SELECT NOW()")
        .asType<LocalDateTime>()
        .fetch()
        .first()
}

在spring -Boot2.4(以及Spring5.3和spring-data-r2dbc1.2)中,spring-data-r2dbc中的org.springframework.data.r2dbc.core.DatabaseClient被弃用,取而代之的是spring- org.springframework.r2dbc.core.DatabaseClient -r2dbc-它具有不同的API。

适应这一点非常简单-除了kotlin扩展asType,它不是新DatabaseClientExtensions的一部分。

代码语言:javascript
复制
fun getCurrentTime(): Mono<LocalDateTime> =
    databaseClient
        .sql("SELECT NOW()")
        .map { row: Row ->
            row.get(0, LocalDateTime::class.java)!!
        }
        .one()

这些扩展是否在其他地方,或者我如何使用实例化的类型参数进行转换?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 16:28:58

TL;DR

在迁移到as(Class) R2DBC之后,没有Spring。

一点背景知识

DatabaseClient在试验性的Spring Data R2DBC项目中开始了它的旅程,尝试了各种方法。其中一人评估了文本SQL API和对象映射API可以结合在一起的程度。Spring Data中的DatabaseClient公开了各种API方法,比如select().from("table").as(targetType)

事实证明,此功能很有用,但会带来一定的限制,因为API进入实体甚至面向聚合的方向越多,实际的API就会变得越复杂,并且在某些情况下,简单对象映射和实体(例如,实体生命周期回调)之间的界限会变得模糊。

我们决定引入R2dbcEntityTemplate作为所有实体绑定操作的抽象,以支持最常见的用例。看看之前的fluent API,对于所有需要即席SQL查询、聚合、函数调用等用例来说,仍然存在差距。

与此同时,该项目被证明是有用的,我们已经确定了可以迁移到Spring Framework5.3中的核心支持类,因此Spring Data R2DBC 1.2可以基于Spring R2DBC之上。

在迁移代码时,我们找不到合适的方法。公平地说,DatabaseClient提供了与NamedParameterJdbcTemplate几乎相同级别的抽象(除了存储过程)。Spring JDBC清楚地附带了几个RowMapper实现,比如SingleColumnRowMapperDataClassRowMapper,它们对Spring R2DBC也很有用。

最后的想法

从用户的角度来看,as(…)看到了很多需求,我们应该调查一下,这个功能(或其变体)是如何浮出水面的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64647566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档