close

Spring Data R2DBC

1.3.0

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()
		.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();
Repository Example
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);

}

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.

Documentation

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.0 CURRENT GA Reference Doc. API Doc.
1.3.1-SNAPSHOT SNAPSHOT
1.2.9-SNAPSHOT SNAPSHOT
1.2.8 GA Reference Doc. API Doc.
1.1.10.BUILD-SNAPSHOT SNAPSHOT
1.1.9.RELEASE GA Reference Doc. API Doc.

A few examples to try out: