入門

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

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

要件

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

データベースに関しては、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 要素に追加します。

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

    <spring.version>6.2.1</spring.version>
  4. 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 (Javadoc) は 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 (Javadoc) を拡張すると、さまざまな Bean が登録されます。そのメソッドを上書きすると、セットアップをカスタマイズできます (以下を参照)。

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

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

ダイアレクト

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

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

ダイアレクトは、通常、Connection.getMetaData() をインスペクションすることによって、JdbcOperations インスタンスから DialectResolver (Javadoc) によって解決されます。+ org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider から META-INF/spring.factories を実装するクラスを登録することで、Spring に JdbcDialect (Javadoc) を自動検出させることができます。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>