java - Spring R2DBC DatabaseClient.as(…)

标签 java spring spring-boot kotlin spring-data-r2dbc

在我的 spring-boot 2.3 应用程序中,我有一个使用 DatabaseClient 的简单数据方法。 :

fun getCurrentTime(): Mono<LocalDateTime> =
    databaseClient
        .execute("SELECT NOW()")
        .asType<LocalDateTime>()
        .fetch()
        .first()
}
使用 spring-boot 2.4(以及 spring 5.3 和 spring-data-r2dbc 1.2),org.springframework.data.r2dbc.core.DatabaseClient来自 spring-data-r2dbc 已弃用,取而代之的是 org.springframework.r2dbc.core.DatabaseClient spring-r2dbc - 它有不同的 API。
调整起来非常简单——除了 kotlin 扩展 asType ,它不是新的 DatabaseClientExtensions 的一部分。
fun getCurrentTime(): Mono<LocalDateTime> =
    databaseClient
        .sql("SELECT NOW()")
        .map { row: Row ->
            row.get(0, LocalDateTime::class.java)!!
        }
        .one()
这些扩展是在其他地方还是我如何使用具体类型参数进行转换?

最佳答案

TL;博士
没有as(Class)迁移到 Spring R2DBC 后的 API。
一点背景DatabaseClient在实验性的 Spring Data R2DBC 项目中开始了它的旅程,尝试了各种方法。其中一位评估了文本 SQL API 和对象映射 API 可以结合在一起的紧密程度。 DatabaseClient在 Spring Data 中公开了各种 API 方法,例如 select().from("table").as(targetType) .
事实证明,这个功能很有用,但也有一定的局限性,因为 API 进入实体甚至面向聚合的方向越多,实际 API 变得越复杂,并且在某些时候,简单对象映射和实体之间的界限(例如,实体生命周期回调)模糊。
我们决定介绍R2dbcEntityTemplate作为所有实体绑定(bind)操作的抽象,以支持最常见的用例。查看之前已经到位的 fluent API,对于所有需要即席 SQL 查询、聚合、函数调用等的用例仍然存在差距。
与此同时,该项目被证明是有用的,我们已经确定了可以迁移到 Spring Framework 5.3 的核心支持类,因此 Spring Data R2DBC 1.2 可以基于 Spring R2DBC。
在迁移代码时,我们无法找到合适的方法。公平地说,DatabaseClient提供与 NamedParameterJdbcTemplate 几乎相同的抽象级别(存储过程除外) . Spring JDBC 清楚地附带了几个 RowMapper SingleColumnRowMapper 等实现或 DataClassRowMapper这对 Spring R2DBC 也很有用。
最后的想法
从用户的角度来看,as(…)看到很多需求,我们应该调查一下,这个功能(或它的变体)是如何出现的。

关于java - Spring R2DBC DatabaseClient.as(…),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64647566/

相关文章:

java - 当使用hibernate加载域对象并且不修改它时,我还需要在服务层定义一个spring事务吗?

java - 我可以使用 NGINX 传递静态 secret (驾驶执照等验证文件)图像吗?

java - 当看到 javascript 警报时 driver.close 不起作用

java - 如何在关闭 Windows 控制台时优雅地关闭 Java 应用程序?

java - Spring,通过反序列化创建一个bean

java - 如何将所需格式的值传递给 @RequestParam 中的 Date 对象?

spring-boot - Spring Boot bootRun 持续构建

java - 如何使用 WHERE IN 子句在 Marklogic JAVA API 中编写 SQL 查询?

java - 比较两个加密密码的情况

java - spring 3.2.0 类未找到异常