SpringBootとHSQLDBの統合
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から入手できます。