閉じる

Spring Data R2DBC

1.3.0

より大きな Spring Data ファミリーの一部である Spring Data R2DBC を使用すると、R2DBC ベースのリポジトリを簡単に実装できます。R2DBC は Reactive Relational Database Connectivity (英語) の略で、リアクティブドライバーを使用して SQL データベースを統合するための仕様です。Spring Data R2DBC は、おなじみの Spring 抽象化と R2DBC のリポジトリサポートを適用します。これにより、リアクティブアプリケーションスタックでリレーショナルデータアクセステクノロジーを使用する Spring を利用したアプリケーションの構築が容易になります。

Spring Data R2DBC は、概念的に簡単であることを目指しています。これを実現するために、ORM フレームワークのキャッシュ、遅延読み込み、後書き、またはその他の多くの機能は提供されていません。これにより、Spring Data R2DBC は、シンプルで限定された、意見の分かれるオブジェクトマッパーになります。

Spring Data R2DBC を使用すると、関数アプローチでデータベースと対話し、アプリケーションのエントリポイントとして R2dbcEntityTemplate を提供できます。

データベースドライバーを選択して開始し、R2dbcEntityTemplate インスタンスを作成します。

PostgreSQL の例
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 DatabaseClient (Javadoc) の上に構築された CriteriaAPI を使用して、マップされたエンティティのステートメントを実行します。

  • ネイティブ構文を使用したパラメーターバインディング。

  • 結果の消費: 更新カウント、マッピングなし(Map<String, Object>)、エンティティへのマッピング、抽出機能。

  • @Query アノテーション付きメソッドを使用したリアクティブリポジトリ。

Spring Initializr

プロジェクトのクイックスタート

Spring Initializr (英語) を使用してアプリケーションをブートストラップします。

ドキュメント

Spring プロジェクト別に用意されています。プロジェクトの機能を使用する方法と、それを使用して達成できることを詳細に説明しています。
1.3.0 CURRENT GA リファレンスドキュメント API ドキュメント
1.3.1-SNAPSHOT SNAPSHOT
1.2.9-SNAPSHOT SNAPSHOT
1.2.8 GA リファレンスドキュメント API ドキュメント
1.1.10.BUILD-SNAPSHOT SNAPSHOT
1.1.9.RELEASE GA リファレンスドキュメント API ドキュメント

例を試してみる: