Spring Data R2DBC


Spring Data R2DBC, part of the larger Spring Data family, makes it easy to implement R2DBC based repositories. R2DBC stands for Reactive Relational Database Connectivity, a specification to integrate SQL databases using reactive drivers. Spring Data R2DBC applies familiar Spring abstractions and repository support for R2DBC. It makes it easier to build Spring-powered applications that use relational data access technologies in a reactive application stack.

Spring Data R2DBC aims at being conceptually easy. In order to achieve this, it does NOT offer caching, lazy loading, write-behind, or many other features of ORM frameworks. This makes Spring Data R2DBC a simple, limited, opinionated object mapper.

Spring Data R2DBC allows a functional approach to interact with your database providing R2dbcEntityTemplate as the entry point for applications.

Get started by picking a database driver and create a R2dbcEntityTemplate instance:

PostgreSQL Example
PostgresqlConnectionFactory connectionFactory = new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()

R2dbcEntityTemplate template = new R2dbcEntityTemplate(connectionFactory);

Mono<Integer> update = template.update(Person.class)
				.apply(update("age", 42));

Flux<Person> all =
				.and("lastname").in("Doe", "White"))
Repository Example
interface PersonRepository extends ReactiveCrudRepository<Person, String> {

	Flux<Person> findByFirstname(String firstname);

	@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);


The client API provides covers the following features:

  • Running statements for mapped entities using the Criteria API built on top of Spring Framework’s R2DBC DatabaseClient.

  • Parameter binding using the native syntax.

  • Result consumption: Update count, unmapped (Map<String, Object>), mapped to entities, extraction function.

  • Reactive repositories using @Query annotated methods.

Spring Initializr

Quickstart Your Project

Bootstrap your application with Spring Initializr.


Each Spring project has its own; it explains in great details how you can use project features and what you can achieve with them.
1.3.5 CURRENT GA Reference Doc. API Doc.
1.4.0-M3 PRE Reference Doc. API Doc.
1.2.13 GA Reference Doc. API Doc.

A few examples to try out: