Mengintegrasikan Spring Boot dengan HSQLDB

1. Gambaran keseluruhan

Spring Boot menjadikannya sangat mudah untuk bekerjasama dengan sistem pangkalan data yang berlainan, tanpa memerlukan pengurusan ketergantungan manual.

Lebih khusus lagi, Spring Data JPA starter menyediakan semua fungsi yang diperlukan untuk penyatuan yang lancar dengan beberapa pelaksanaan DataSource .

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

2. Pergantungan Maven

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

Inilah starter Spring Boot yang akan kami gunakan untuk menyiapkan lapisan repositori sampel kami:

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

Perhatikan bahawa kami juga memasukkan kebergantungan HSQLDB. Tanpa itu, Spring Boot akan cuba mengkonfigurasi kacang DataSource dan kumpulan sambungan JDBC secara automatik untuk kami melalui HikariCP.

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

Selain itu, mari kita periksa versi terbaru spring-boot-starter-data-jpa di Maven Central.

3. Menyambung ke Pangkalan Data HSQLDB

Untuk menggunakan lapisan repositori demo kami, kami akan menggunakan pangkalan data dalam memori. Namun, mungkin juga untuk bekerja dengan pangkalan data berasaskan fail. Kami akan meneroka setiap kaedah ini di bahagian di bawah.

3.1. Menjalankan Pelayan HSQLDB Luaran

Mari kita lihat bagaimana menjalankan pelayan HSQLDB luaran dan membuat pangkalan data berasaskan fail. Memasang HSQLDB dan menjalankan pelayan adalah mudah, secara keseluruhan.

Berikut adalah langkah-langkah yang harus kita ikuti:

  • Pertama, kami akan memuat turun HSQLDB dan membuka zip ke folder
  • Oleh kerana HSQLDB tidak menyediakan pangkalan data lalai di luar kotak, kami akan membuatnya yang disebut "testdb" sebagai contoh
  • Kami akan melancarkan 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 memulakan pelayan HSQLDB dan membuat pangkalan data kami yang fail sumbernya akan disimpan dalam folder data
  • Kami dapat memastikan pangkalan data benar-benar dibuat dengan pergi ke folder data , yang harus berisi sekumpulan file yang disebut "testdb.lck" , "testdb.log" , "testdb.properties" , dan "testdb.script" ( jumlah fail berbeza-beza bergantung pada jenis pangkalan data yang kita buat)

Setelah pangkalan data disediakan, kita perlu membuat sambungan ke pangkalan data.

Untuk melakukan ini di Windows , mari pergi ke folder tong pangkalan data dan jalankan fail runManagerSwing.bat . Ini akan membuka skrin awal Pengurus Pangkalan Data HSQLDB, di mana kita boleh memasukkan bukti kelayakan sambungan:

  • Jenis: Enjin Pangkalan Data HSQL
  • URL: jdbc: hsqldb: hsql: // localhost / testdb
  • Pengguna: "SA" (Pentadbir Sistem)
  • Kata Laluan: kosongkan medan

Pada Linux / Unix / Mac , kita dapat menggunakan NetBeans, Eclipse, atau IntelliJ IDEA untuk membuat sambungan pangkalan data melalui alat visual IDE, menggunakan kelayakan yang sama.

Dalam mana-mana alat ini, sangat mudah untuk membuat jadual pangkalan data sama ada dengan menjalankan skrip SQL di Pengurus Pangkalan Data atau di dalam IDE.

Setelah disambungkan, kami dapat membuat jadual pelanggan :

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

Hanya dengan beberapa langkah mudah, kami telah membuat pangkalan data HSQLDB berasaskan fail yang mengandungi jadual pelanggan .

3.2. The application.properties Fail

Sekiranya kami ingin menyambung ke pangkalan data berasaskan fail sebelumnya dari Spring Boot, berikut adalah tetapan yang harus kami sertakan dalam fail 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 

Sebagai alternatif, jika kita menggunakan pangkalan data 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 yang dilampirkan di hujung URL pangkalan data. Ketika bekerja dengan pangkalan data dalam memori, kita perlu menentukannya, sehingga pelaksanaan JPA, yang Hibernate, tidak akan menutup pangkalan data ketika aplikasi sedang berjalan .

4. Entiti Pelanggan

Dengan tetapan sambungan pangkalan data yang telah disediakan, selanjutnya kita perlu menentukan entiti 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. Repositori Pelanggan

Di samping itu, kita perlu menerapkan lapisan ketekunan nipis, yang membolehkan kita mempunyai fungsi CRUD asas pada entiti JPA Pelanggan kita .

Kita boleh menerapkan lapisan ini dengan mudah dengan hanya memperluas antara muka CrudRepository :

@Repository public interface CustomerRepository extends CrudRepository {}

6. Menguji Repositori Pelanggan

Akhirnya, kita harus memastikan bahawa Spring Boot benar-benar dapat menyambung ke HSQLDB. Kita dapat melakukannya dengan mudah dengan hanya menguji lapisan repositori.

Mari mula menguji kaedah 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); } } 

Akhirnya, mari kita uji kaedah 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. Kesimpulannya

Dalam artikel ini, kami belajar bagaimana mengintegrasikan Spring Boot dengan HSQLDB, dan bagaimana menggunakan pangkalan data berdasarkan fail atau dalam memori dalam pengembangan lapisan repositori JPA asas.

Seperti biasa, semua contoh kod yang ditunjukkan dalam artikel ini terdapat di GitHub.