Mengintegrasikan Spring Boot dengan HSQLDB

1. Ikhtisar

Spring Boot membuatnya sangat mudah untuk bekerja dengan sistem database yang berbeda, tanpa kerumitan manajemen ketergantungan manual.

Lebih khusus lagi, starter JPA Data Musim Semi menyediakan semua fungsionalitas yang diperlukan untuk integrasi yang lancar dengan beberapa implementasi Sumber Data .

Dalam tutorial ini, kita akan belajar bagaimana mengintegrasikan Spring Boot dengan HSQLDB .

2. Dependensi Maven

Untuk menunjukkan betapa mudahnya mengintegrasikan Spring Boot dengan HSQLDB, kami akan membuat lapisan repositori JPA sederhana yang melakukan operasi CRUD pada entitas pelanggan menggunakan database HSQLDB dalam memori .

Inilah starter Spring Boot yang akan kami gunakan untuk mengaktifkan dan menjalankan lapisan repositori sampel kami:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE org.hsqldb hsqldb 2.4.0 runtime 

Perhatikan bahwa kami telah menyertakan dependensi HSQLDB juga. Tanpanya, Spring Boot akan mencoba untuk secara otomatis mengkonfigurasi kacang DataSource dan kumpulan koneksi JDBC untuk kita melalui HikariCP.

Akibatnya, jika kita tidak menentukan ketergantungan DataSource yang valid dalam file pom.xml kita, kita akan mengalami kegagalan build .

Selain itu, pastikan untuk memeriksa versi terbaru spring-boot-starter-data-jpa di Maven Central.

3. Menghubungkan ke Database HSQLDB

Untuk melatih lapisan repositori demo kami, kami akan menggunakan database dalam memori. Namun, dimungkinkan untuk bekerja dengan database berbasis file juga. Kami akan menjelajahi masing-masing metode ini pada bagian di bawah ini.

3.1. Menjalankan Server HSQLDB Eksternal

Mari kita lihat cara menjalankan server HSQLDB eksternal dan membuat database berbasis file. Menginstal HSQLDB dan menjalankan server sangatlah mudah, secara keseluruhan.

Berikut langkah-langkah yang harus kita ikuti:

  • Pertama, kami akan mengunduh HSQLDB dan mengekstraknya ke folder
  • Karena HSQLDB tidak menyediakan database default, kami akan membuat database yang disebut "testdb" untuk tujuan contoh
  • Kami akan meluncurkan command prompt dan menavigasi ke folder data HSQLDB
  • Di dalam folder data , kami akan menjalankan perintah berikut:
    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • Perintah di atas akan memulai server HSQLDB dan membuat database kami yang file sumbernya akan disimpan di folder data
  • Kita dapat memastikan bahwa database telah benar-benar dibuat dengan membuka folder data , yang seharusnya berisi sekumpulan file bernama "testdb.lck" , "testdb.log" , "testdb.properties" , dan "testdb.script" ( jumlah file bervariasi tergantung pada jenis database yang kita buat)

Setelah database disiapkan, kita perlu membuat koneksi ke database tersebut.

Untuk melakukan ini di Windows , buka folder database bin dan jalankan file runManagerSwing.bat . Ini akan membuka layar awal Manajer Database HSQLDB, di mana kita dapat memasukkan kredensial koneksi:

  • Jenis: Mesin Database HSQL
  • URL: jdbc: hsqldb: hsql: // localhost / testdb
  • Pengguna: “SA” (Administrator Sistem)
  • Kata sandi: biarkan field kosong

Di Linux / Unix / Mac , kita dapat menggunakan NetBeans, Eclipse, atau IntelliJ IDEA untuk membuat koneksi database melalui alat visual IDE, menggunakan kredensial yang sama.

Di salah satu alat ini, sangat mudah untuk membuat tabel database baik dengan menjalankan skrip SQL di Database Manager atau di dalam IDE.

Setelah terhubung, kita dapat membuat tabel pelanggan :

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

Hanya dalam beberapa langkah mudah, kami telah membuat database HSQLDB berbasis file yang berisi tabel pelanggan .

3.2. The application.properties Berkas

Jika kita ingin terhubung ke database berbasis file sebelumnya dari Spring Boot, berikut adalah pengaturan yang harus kita sertakan dalam file 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 

Alternatifnya, jika kita menggunakan database dalam memori, kita harus menggunakan ini:

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 

Harap perhatikan parameter DB_CLOSE_DELAY = -1 ditambahkan ke akhir URL database. Saat bekerja dengan database dalam memori, kita perlu menentukan ini, sehingga implementasi JPA, yaitu Hibernate, tidak akan menutup database saat aplikasi sedang berjalan .

4. Entitas Pelanggan

Dengan pengaturan koneksi database yang sudah disiapkan, selanjutnya kita perlu menentukan entitas Pelanggan kita :

@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. Tempat Penyimpanan Pelanggan

Selain itu, kami perlu menerapkan lapisan persistensi tipis, yang memungkinkan kami memiliki fungsionalitas CRUD dasar pada entitas JPA Pelanggan kami .

Kita dapat dengan mudah mengimplementasikan lapisan ini hanya dengan memperluas antarmuka CrudRepository :

@Repository public interface CustomerRepository extends CrudRepository {}

6. Menguji Repositori Pelanggan

Terakhir, kita harus memastikan bahwa Spring Boot benar-benar dapat terhubung ke HSQLDB. Kita dapat dengan mudah melakukannya hanya dengan menguji lapisan repositori.

Mari mulai menguji metode findById () dan findAll () repositori :

@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); } } 

Terakhir, mari kita uji metode 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. Kesimpulan

In this article, we learned how to integrate Spring Boot with HSQLDB, and how to use either a file-based or in-memory database in the development of a basic JPA repository layer.

As usual, all the code samples shown in this article are available over on GitHub.