En mi aplicación spring-boot 2.3, tengo un método de datos simple usando DatabaseClient :
fun getCurrentTime(): Mono<LocalDateTime> = databaseClient .execute("SELECT NOW()") .asType<LocalDateTime>() .fetch() .first() } Con spring-boot 2.4 (y spring 5.3 y spring-data-r2dbc 1.2), org.springframework.data.r2dbc.core.DatabaseClient de spring-data-r2dbc está obsoleto en favor de org.springframework.r2dbc.core.DatabaseClient de spring-r2dbc, que tiene una API diferente.
Adaptar eso es bastante sencillo, con la excepción de la extensión asType , que no forma parte de las nuevas DatabaseClientExtensions.
fun getCurrentTime(): Mono<LocalDateTime> = databaseClient .sql("SELECT NOW()") .map { row: Row -> row.get(0, LocalDateTime::class.java)!! } .one()¿Están esas extensiones en otro lugar o cómo puedo convertir usando un parámetro de tipo cosificado?
No hay API as(Class) después de la migración a Spring R2DBC.
DatabaseClient comenzó su viaje en el proyecto experimental Spring Data R2DBC, probando varios enfoques. Uno de ellos evaluó qué tan cerca se podrían unir una API de SQL textual y una API de mapeo de objetos. DatabaseClient en Spring Data expuso varios métodos API como select().from("table").as(targetType) .
Resultó que esta funcionalidad es útil pero presenta ciertas limitaciones porque cuanto más una API entra en una entidad o incluso en una dirección orientada a agregados, más compleja se vuelve la API real y, en algún punto, los límites entre el mapeo de objetos simples y las entidades (por ejemplo , devoluciones de llamada del ciclo de vida de la entidad) desenfoque.
Decidimos presentar R2dbcEntityTemplate como una abstracción para todas las operaciones vinculadas a entidades para admitir los casos de uso más comunes. Al observar la API fluida que estaba previamente en su lugar, todavía hay una brecha para todos los casos de uso que requieren consultas SQL ad-hoc, agregaciones, llamadas a funciones, etc.
Mientras tanto, el proyecto resultó útil y hemos identificado clases de soporte básico que podrían migrarse a Spring Framework 5.3, por lo que Spring Data R2DBC 1.2 podría basarse en Spring R2DBC.
No pudimos idear un enfoque adecuado al migrar el código. Para ser justos, DatabaseClient ofrece casi el mismo nivel de abstracción (a excepción de los procedimientos almacenados) que NamedParameterJdbcTemplate . Spring JDBC se envía claramente con varias implementaciones de RowMapper , como SingleColumnRowMapper o DataClassRowMapper , que también serían útiles para Spring R2DBC.
Desde la perspectiva del usuario, as(…) hay mucha demanda y debemos investigar cómo podría surgir esta funcionalidad (o una variante de la misma).