如何在 kotlin 中使用 spring data 和 r2dbc 映射类

Int*_*ted 6 spring kotlin spring-data-r2dbc

org.springframework.r2dbc DatabaseClient 类已移至

import org.springframework.r2dbc.core.DatabaseClient;
Run Code Online (Sandbox Code Playgroud)

import org.springframework.data.r2dbc.core.DatabaseClient;
Run Code Online (Sandbox Code Playgroud)

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

   databaseClient
        .sql("select * from reading")
        .as(CrepsReading::class.java)
        .fetch()
        .all()
        .asFlow()
Run Code Online (Sandbox Code Playgroud)

它不起作用。map(class) 也没有。只有映射类似乎有效。

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

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

Han*_*tsy 6

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

检查我的示例以查看如何处理生成的地图。

    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();
    }
Run Code Online (Sandbox Code Playgroud)