Spring Data R2DBC
Spring Data R2DBC是较大的Spring Data系列的一部分,可轻松实现基于R2DBC的存储库。R2DBC代表“反应式关系数据库连接”,该规范用于使用反应式驱动程序集成SQL数据库。Spring Data R2DBC对R2DBC应用了熟悉的Spring抽象和存储库支持。它使在响应式应用程序堆栈中构建使用关系数据访问技术的Spring驱动的应用程序更加容易。
Spring Data R2DBC旨在从概念上简化。为了实现此目的,它不提供ORM框架的缓存,延迟加载,后写或其他许多功能。这使Spring Data R2DBC成为一个简单,有限,自以为是的对象映射器。
Spring Data R2DBC允许一种实用的方法与您的数据库进行交互,R2dbcEntityTemplate
作为应用程序的入口点。
通过选择数据库驱动程序并创建R2dbcEntityTemplate
实例来开始使用:
-
H2(
io.r2dbc:r2dbc-h2
) -
MariaDB(
org.mariadb:r2dbc-mariadb
) -
Microsoft SQL Server(
io.r2dbc:r2dbc-mssql
) -
MySQL(
dev.miku:r2dbc-mysql
) -
jasync-sql MySQL(
com.github.jasync-sql:jasync-r2dbc-mysql
) -
Postgres(
io.r2dbc:r2dbc-postgresql
) -
甲骨文(
com.oracle.database.r2dbc:oracle-r2dbc
)
PostgresqlConnectionFactory connectionFactory = new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
.host(…)
.database(…)
.username(…)
.password(…).build());
R2dbcEntityTemplate template = new R2dbcEntityTemplate(connectionFactory);
Mono<Integer> update = template.update(Person.class)
.inTable("person_table")
.matching(query(where("firstname").is("John")))
.apply(update("age", 42));
Flux<Person> all = template.select(Person.class)
.matching(query(where("firstname").is("John")
.and("lastname").in("Doe", "White"))
.sort(by(desc("id"))))
.all();
interface PersonRepository extends ReactiveCrudRepository<Person, String> {
Flux<Person> findByFirstname(String firstname);
@Modifying
@Query("UPDATE person SET firstname = :firstname where lastname = :lastname")
Mono<Integer> setFixedFirstnameFor(String firstname, String lastname);
@Query("SELECT * FROM person WHERE lastname = :#{[0]}")
Flux<Person> findByQueryWithExpression(String lastname);
}
客户端API提供了以下功能:
-
使用在Spring Framework的R2DBC之上构建的Criteria API为映射的实体运行语句
DatabaseClient
。 -
使用本机语法的参数绑定。
-
结果消耗:更新计数,未映射(
Map<String, Object>
),映射到实体,提取函数。 -
使用
@Query
注释方法的反应性存储库。