如何将数据库客户端结果转换为对象?
How to convert databaseClient result into object?
我有一个任务是通过 r2dbc 数据库客户端插入实体,并将结果(地图)转换为实体。
我想这样做:
databaseClient.insert().into(ApplicationData.class)
.using(applicationData)
.map(converter.populateIdIfNecessary(applicationData))
.first();
但问题是 converter 实体 MappingR2dbcConverter 不是由 spring 创建的。
所以,我决定自己创建它:
@Bean
public MappingR2dbcConverter converter(RelationalMappingContext mappingContext,
R2dbcCustomConversions r2dbcCustomConversions)....
我的问题,将结果图转换为实体的方法是否正确?
R2dbc DatabaseClient 将成为 Spring 框架 5.3 的一部分,请参阅 My example for Spring 5.3 M2。
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();
public Flux<Post> findAll() {
return this.databaseClient
.sql("SELECT * FROM posts")
.filter((statement, executeFunction) -> statement.fetchSize(10).execute())
.map(MAPPING_FUNCTION)
.all();
}
public Mono<Post> findById(UUID id) {
return this.databaseClient
.sql("SELECT * FROM posts WHERE id=:id")
.bind("id", id)
.map(MAPPING_FUNCTION)
.one();
}
我有一个任务是通过 r2dbc 数据库客户端插入实体,并将结果(地图)转换为实体。 我想这样做:
databaseClient.insert().into(ApplicationData.class)
.using(applicationData)
.map(converter.populateIdIfNecessary(applicationData))
.first();
但问题是 converter 实体 MappingR2dbcConverter 不是由 spring 创建的。 所以,我决定自己创建它:
@Bean
public MappingR2dbcConverter converter(RelationalMappingContext mappingContext,
R2dbcCustomConversions r2dbcCustomConversions)....
我的问题,将结果图转换为实体的方法是否正确?
R2dbc DatabaseClient 将成为 Spring 框架 5.3 的一部分,请参阅 My example for Spring 5.3 M2。
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();
public Flux<Post> findAll() {
return this.databaseClient
.sql("SELECT * FROM posts")
.filter((statement, executeFunction) -> statement.fetchSize(10).execute())
.map(MAPPING_FUNCTION)
.all();
}
public Mono<Post> findById(UUID id) {
return this.databaseClient
.sql("SELECT * FROM posts WHERE id=:id")
.bind("id", id)
.map(MAPPING_FUNCTION)
.one();
}