入門

作業環境をブートストラップ設定する簡単な方法は、Pleiades All in One (JDK, STS, Lombok 付属) Spring Tools (英語) または Spring Initializr から Spring ベースのプロジェクトを作成することです。

まず、実行中のデータベースサーバーをセットアップする必要があります。JDBC アクセス用にデータベースを構成する方法については、ベンダーのドキュメントを参照してください。

要件

Spring Data JDBC には Spring Framework 6.1.9 以降が必要です。

データベースに関しては、Spring Data JDBC には、ベンダー固有のフレーバーよりも一般的な SQL 機能を抽象化するためのダイアレクトが必要です。Spring Data JDBC は、以下のデータベースを直接サポートしています。

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • Postgres

別のデータベースを使用すると、アプリケーションは起動しません。このような場合の対処方法については、ダイアレクトのセクションに詳しく記載されています。

Hello World

STS で Spring プロジェクトを作成するには:

  1. ファイル→新規→ Spring テンプレートプロジェクト→シンプル Spring ユーティリティプロジェクトに移動し、プロンプトが表示されたらはいを押します。次に、プロジェクトとパッケージ名(org.spring.jdbc.example など)を入力します。

  2. 以下を pom.xml ファイルの dependencies 要素に追加します。

  3. 以下を pom.xml ファイルの dependencies 要素に追加します。

    <dependencies>
    
      <!-- other dependency elements omitted -->
    
      <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jdbc</artifactId>
        <version>3.3.1</version>
      </dependency>
    
    </dependencies>
  4. pom.xml の Spring のバージョンを次のように変更します

    <spring.version>6.1.9</spring-framework.version>
  5. Maven の Spring マイルストーンリポジトリの次の場所を、<dependencies/> 要素と同じレベルになるように pom.xml に追加します。

    <repositories>
      <repository>
        <id>spring-milestone</id>
        <name>Spring Maven MILESTONE Repository</name>
        <url>https://repo.spring.io/milestone</url>
      </repository>
    </repositories>

リポジトリも参照できます (英語)

ログ

Spring Data JDBC は、それ自体ではほとんどまたはまったくロギングを行いません。代わりに、SQL ステートメントを発行する JdbcTemplate のメカニズムにより、ログが提供されます。実行されている SQL ステートメントをインスペクションする場合は、Spring の NamedParameterJdbcTemplate または MyBatis のロギングをアクティブにします。

ロギングレベルを DEBUG に設定して、追加情報を表示することもできます。これを行うには、application.properties ファイルを編集して次のコンテンツを作成します。

logging.level.org.springframework.jdbc=DEBUG

サンプルリポジトリ

GitHub リポジトリといくつかの例 (英語) をダウンロードして試して、ライブラリの動作を確認してください。

構成

次の例に示すように、Spring Data JDBC リポジトリのサポートは、Java 構成を介したアノテーションによってアクティブにできます。

Java 構成を使用した Spring Data JDBC リポジトリ
@Configuration
@EnableJdbcRepositories                                                                (1)
class ApplicationConfig extends AbstractJdbcConfiguration {                            (2)

    @Bean
    DataSource dataSource() {                                                         (3)

        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.HSQL).build();
    }

    @Bean
    NamedParameterJdbcOperations namedParameterJdbcOperations(DataSource dataSource) { (4)
        return new NamedParameterJdbcTemplate(dataSource);
    }

    @Bean
    TransactionManager transactionManager(DataSource dataSource) {                     (5)
        return new DataSourceTransactionManager(dataSource);
    }
}
1@EnableJdbcRepositories は、Repository から派生したインターフェースの実装を作成します
2AbstractJdbcConfiguration は、Spring Data JDBC に必要なさまざまなデフォルト Bean を提供します
3 データベースに接続する DataSource を作成します。これは、次の 2 つの Bean メソッドで必要です。
4Spring Data JDBC がデータベースにアクセスするために使用する NamedParameterJdbcOperations を作成します。
5Spring Data JDBC は、Spring JDBC によって提供されるトランザクション管理を利用します。

前の例の構成クラスは、spring-jdbc の EmbeddedDatabaseBuilder API を使用して、組み込み HSQL データベースをセットアップします。次に、DataSource を使用して NamedParameterJdbcOperations と TransactionManager をセットアップします。@EnableJdbcRepositories を使用して、最終的に Spring Data JDBC リポジトリをアクティブ化します。基本パッケージが構成されていない場合は、構成クラスが存在するパッケージを使用します。AbstractJdbcConfiguration を拡張すると、さまざまな Bean が確実に登録されます。メソッドを上書きすると、セットアップをカスタマイズできます(以下を参照)。

この構成は、Spring Boot を使用してさらに簡略化できます。Spring Boot では、スターター spring-boot-starter-data-jdbc が依存関係に含まれていれば、DataSource で十分です。他のすべては Spring Boot によって行われます。

このセットアップでカスタマイズしたいことがいくつかあります。

ダイアレクト

Spring Data JDBC は、インターフェース Dialect の実装を使用して、データベースまたはその JDBC ドライバーに固有の動作をカプセル化します。デフォルトでは、AbstractJdbcConfiguration は接続を取得し、正しい Dialect を登録することにより、データベース構成からダイアレクトを特定しようとします。AbstractJdbcConfiguration.jdbcDialect(NamedParameterJdbcOperations) をオーバーライドして、ダイアレクトの選択をカスタマイズします。

使用可能なダイアレクトがないデータベースを使用すると、アプリケーションは起動しません。その場合、ベンダーに Dialect 実装の提供を依頼する必要があります。あるいは、独自の Dialect を実装することもできます。

ダイアレクトは、JdbcOperations インスタンスからの DialectResolver (Javadoc) によって、通常は Connection.getMetaData() をインスペクションすることによって解決されます。+ org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider から META-INF/spring.factories まで実装するクラスを登録することで、Spring に JdbcDialect を自動検出させることができます。DialectResolver は、Spring の SpringFactoriesLoader を使用して、クラスパスからダイアレクトプロバイダー実装を検出します。そうするために:

  1. 独自の Dialect を実装します。

  2. Dialect を返す JdbcDialectProvider を実装します。

  3. META-INF に spring.factories リソースを作成してプロバイダーを登録し、行を追加して登録を実行します
     org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=<fully qualified name of your JdbcDialectProvider>