1. 概要

Spring Boot を使用すると、手動の依存関係管理の手間をかけずに、さまざまなデータベースシステムでの作業が非常に簡単になります。

より具体的には、 Spring Data JPA スターターは、いくつかのDataSource実装とのシームレスな統合に必要なすべての機能を提供します。

このチュートリアルでは、Spring BootをHSQLDBと統合する方法を学習します。

2. Mavenの依存関係

Spring BootをHSQLDBと統合するのがいかに簡単かを示すために、インメモリHSQLDBデータベースを使用して顧客エンティティに対してCRUD操作を実行する単純なJPAリポジトリレイヤーを作成します。

サンプルリポジトリレイヤーを起動して実行するために使用するSpring Bootスターターは次のとおりです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.0</version>
    <scope>runtime</scope>
</dependency>

HSQLDB依存関係も含まれていることに注意してください。 これがないと、SpringBootはDataSourceBeanとHikariCPを介したJDBC接続プールを自動的に構成しようとします。

結果として、 pom.xmlファイルで有効なDataSource依存関係を指定しないと、ビルドエラーが発生します

さらに、MavenCentralでspring-boot-starter-data-jpaの最新バージョンを確認してください。

3. HSQLDBデータベースへの接続

デモリポジトリレイヤーを実行するために、インメモリデータベースを使用します。 ただし、ファイルベースのデータベースを使用することもできます。 以下のセクションでは、これらの各方法について説明します。

3.1. 外部HSQLDBサーバーの実行

外部HSQLDBサーバーを実行して、ファイルベースのデータベースを作成する方法を見てみましょう。 HSQLDBのインストールとサーバーの実行は、全体的に簡単です。

従う必要のある手順は次のとおりです。

  • まず、 HSQLDB をダウンロードして、フォルダーに解凍します
  • HSQLDBはすぐに使用できるデフォルトのデータベースを提供していないため、例として「testdb」というデータベースを作成します。
  • コマンドプロンプトを起動し、HSQLDB dataフォルダーに移動します
  • data フォルダー内で、次のコマンドを実行します。
    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • 上記のコマンドは、HSQLDBサーバーを起動し、ソースファイルがdataフォルダーに保存されるデータベースを作成します。
  • data フォルダーに移動すると、データベースが実際に作成されていることを確認できます。このフォルダーには、「testdb.lck」「testdb.log」というファイルのセットが含まれている必要があります。 」「testdb.properties」、および「testdb.script」(ファイルの数は、作成するデータベースのタイプによって異なります)

データベースを設定したら、データベースへの接続を作成する必要があります。

Windows でこれを行うには、データベース bin フォルダーに移動し、runManagerSwing.batファイルを実行します。 これにより、HSQLDB Database Managerの初期画面が開き、接続資格情報を入力できます。

  • タイプ:HSQLデータベースエンジン
  • URL: jdbc:hsqldb:hsql:// localhost / testdb
  • ユーザー:「SA」(システム管理者)
  • パスワード:フィールドを空のままにします

Linux / Unix / Mac では、NetBeans、Eclipse、またはIntelliJ IDEAを使用して、同じ資格情報を使用してIDEのビジュアルツールを介してデータベース接続を作成できます。

これらのツールのいずれでも、データベースマネージャまたはIDE内でSQLスクリプトを実行することにより、データベーステーブルを簡単に作成できます。

接続したら、Customersテーブルを作成できます。

CREATE TABLE customers (
   id INT  NOT NULL,
   name VARCHAR (45),
   email VARCHAR (45),      
   PRIMARY KEY (ID)
); 

いくつかの簡単な手順で、Customersテーブルを含むファイルベースのHSQLDBデータベースを作成しました。

3.2. application.propertiesファイル

Spring Bootから以前のファイルベースのデータベースに接続する場合は、application.propertiesファイルに含める必要のある設定を次に示します。

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver 
spring.datasource.url=jdbc:hsqldb:hsql://localhost/testdb 
spring.datasource.username=sa 
spring.datasource.password= 
spring.jpa.hibernate.ddl-auto=update

または、インメモリデータベースを使用する場合は、次のものを使用する必要があります。

spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver
spring.datasource.url=jdbc:hsqldb:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create

データベースURLの末尾にDB_CLOSE_DELAY=-1パラメーターが追加されていることに注意してください。 インメモリデータベースを操作する場合は、これを指定する必要があります。これにより、HibernateであるJPA実装は、アプリケーションの実行中にデータベースを閉じません

4. Customerエンティティ

データベース接続設定がすでに設定されているので、次にCustomerエンティティを定義する必要があります。

@Entity
@Table(name = "customers")
public class Customer {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    
    private String name;
    
    private String email;

    // standard constructors / setters / getters / toString
}

5. Customerリポジトリ

さらに、薄い永続層を実装する必要があります。これにより、 CustomerJPAエンティティで基本的なCRUD機能を使用できるようになります。

CrudRepository インターフェースを拡張するだけで、このレイヤーを簡単に実装できます。

@Repository
public interface CustomerRepository extends CrudRepository<Customer, Long> {}

6. Customerリポジトリのテスト

最後に、SpringBootが実際にHSQLDBに接続できることを確認する必要があります。 リポジトリレイヤーをテストするだけで、これを簡単に実現できます。

リポジトリのfindById()および findAll()メソッドのテストを開始しましょう。

@RunWith(SpringRunner.class)
@SpringBootTest
public class CustomerRepositoryTest {
    
    @Autowired
    private CustomerRepository customerRepository;
    
    @Test
    public void whenFindingCustomerById_thenCorrect() {
        customerRepository.save(new Customer("John", "[email protected]"));
        assertThat(customerRepository.findById(1L)).isInstanceOf(Optional.class);
    }
    
    @Test
    public void whenFindingAllCustomers_thenCorrect() {
        customerRepository.save(new Customer("John", "[email protected]"));
        customerRepository.save(new Customer("Julie", "[email protected]"));
        assertThat(customerRepository.findAll()).isInstanceOf(List.class);
    }
}

最後に、 save()メソッドをテストしてみましょう。

@Test
public void whenSavingCustomer_thenCorrect() {
    customerRepository.save(new Customer("Bob", "[email protected]"));
    Customer customer = customerRepository.findById(1L).orElseGet(() 
      -> new Customer("john", "[email protected]"));
    assertThat(customer.getName()).isEqualTo("Bob");
}

7. 結論

この記事では、 Spring BootをHSQLDBと統合する方法、、および基本的なJPAリポジトリレイヤーの開発でファイルベースまたはインメモリデータベースを使用する方法を学びました。

いつものように、この記事に示されているすべてのコードサンプルは、GitHubから入手できます。