Rüd*_*ulz 12 java spring kotlin spring-boot spring-data-r2dbc
在我的 spring-boot 2.3 应用程序中,我使用了一个简单的数据方法DatabaseClient:
fun getCurrentTime(): Mono<LocalDateTime> =
databaseClient
.execute("SELECT NOW()")
.asType<LocalDateTime>()
.fetch()
.first()
}
Run Code Online (Sandbox Code Playgroud)
使用 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()
Run Code Online (Sandbox Code Playgroud)
这些扩展是其他地方还是我如何使用具体化类型参数进行转换?
as(Class)迁移到 Spring R2DBC 后没有API。
DatabaseClient在实验性的 Spring Data R2DBC 项目中开始了它的旅程,尝试了各种方法。其中一个评估了文本 SQL API 和对象映射 API 可以结合在一起的程度。DatabaseClient在 Spring Data 中暴露了各种 API 方法,例如select().from("table").as(targetType).
事实证明,此功能很有用,但也有一定的局限性,因为 API 进入实体甚至面向聚合的方向越多,实际 API 变得越复杂,并且在某些时候,简单对象映射和实体之间的边界(例如, 实体生命周期回调)模糊。
我们决定引入R2dbcEntityTemplate所有实体绑定操作的抽象,以支持最常见的用例。看看之前的 fluent API,所有需要临时 SQL 查询、聚合、函数调用等的用例仍然存在差距。
与此同时,该项目证明是有用的,我们已经确定了可以迁移到 Spring Framework 5.3 的核心支持类,因此 Spring Data R2DBC 1.2 可以基于 Spring R2DBC。
在迁移代码时,我们无法想出合适的方法。公平地说,DatabaseClient提供与 NamedParameterJdbcTemplate. Spring JDBC 明确附带了一些RowMapper实现,例如SingleColumnRowMapper或DataClassRowMapper对 Spring R2DBC 也很有用。
从用户的角度来看,as(…)看到了很多需求,我们应该调查一下,这个功能(或它的一个变体)是如何出现的。
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |