如何在 kotlin 中使用 spring 数据和 r2dbc 映射 class

How do I map a class using spring data and r2dbc in kotlin

org.springframework.r2dbc DatabaseClient class 已移至

import org.springframework.r2dbc.core.DatabaseClient;

来自

import org.springframework.data.r2dbc.core.DatabaseClient;

Spring数据文档https://spring.io/projects/spring-data-r2dbc引用了一个简单的'as'方法来转换为对象

   databaseClient
        .sql("select * from reading")
        .as(CrepsReading::class.java)
        .fetch()
        .all()
        .asFlow()

不行。 map(class) 也没有。只有映射 class 似乎有效。

     val all: Flux<CrepsReading> = databaseClient
            .sql("SELECT id, name FROM person")
            .map(CrepsReading::class)
            .fetch().all()

如何使用 spring-data-r2dbc (1.2.0) 映射一个对象?是否有描述作为 spring-data-r2dbc 一部分的 DatabaseClient 的使用的文档?

在Spring 5.3/Spring Data R2dbc中,DatabaseClient被重构并移至Spring框架的核心。

检查 my example 以查看如何处理生成的地图。

    public static final BiFunction<Row, RowMetadata, Post> MAPPING_FUNCTION = (row, rowMetaData) -> Post.builder()
            .id(row.get("id", UUID.class))
            .title(row.get("title", String.class))
            .content(row.get("content", String.class))
            .status(row.get("status", Post.Status.class))
            .metadata(row.get("metadata", Json.class))
            .createdAt(row.get("created_at", LocalDateTime.class))
            .build();

    private final DatabaseClient databaseClient;

    public Flux<Post> findByTitleContains(String name) {
        return this.databaseClient
                .sql("SELECT * FROM posts WHERE title LIKE :title")
                .bind("title", "%" + name + "%")
                .map(MAPPING_FUNCTION)
                .all();
    }