Integrering af fjedersko med HSQLDB

1. Oversigt

Spring Boot gør det virkelig nemt at arbejde med forskellige databasesystemer uden besværet med manuel afhængighedsstyring.

Mere specifikt leverer Spring Data JPA-starter al den nødvendige funktionalitet til problemfri integration med flere Datakilde implementeringer.

I denne vejledning vi lærer at integrere Spring Boot med HSQLDB.

2. Maven-afhængighederne

For at demonstrere, hvor let det er at integrere Spring Boot med HSQLDB, vi opretter et simpelt JPA-lagerlag, der udfører CRUD-operationer på kundenheder ved hjælp af en in-memory HSQLDB-database.

Her er Spring Boot-starter, som vi bruger til at få vores prøveopbevaringslag i gang:

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

Bemærk, at vi også har inkluderet HSQLDB-afhængigheden. Uden det forsøger Spring Boot automatisk at konfigurere en Datakilde bønne og en JDBC-forbindelsespulje til os gennem HikariCP.

Som en konsekvens, hvis vi ikke angiver en gyldig Datakilde afhængighed i vores pom.xml fil, får vi en byggefejl.

Lad os desuden sørge for at kontrollere den nyeste version af spring-boot-starter-data-jpa på Maven Central.

3. Oprette forbindelse til en HSQLDB-database

Til at udøve vores demo-lagerlag bruger vi en in-memory-database. Det er dog også muligt at arbejde med filbaserede databaser. Vi undersøger hver af disse metoder i afsnittene nedenfor.

3.1. Kørsel af en ekstern HSQLDB-server

Lad os se på, hvordan man får en ekstern HSQLDB-server til at køre og opretter en filbaseret database. Installation af HSQLDB og kørsel af serveren er alt i alt ligetil.

Her er de trin, vi skal følge:

  • Først downloader vi HSQLDB og pakker den ud i en mappe
  • Da HSQLDB ikke leverer en standarddatabase ud af boksen, opretter vi en kaldet “Testdb” for eksempel formål
  • Vi starter en kommandoprompt og navigerer til HSQLDB data folder
  • Indenfor data mappe, kører vi følgende kommando:
    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • Ovenstående kommando starter HSQLDB-serveren og opretter vores database, hvis kildefiler gemmes i data folder
  • Vi kan sikre os, at databasen faktisk er oprettet ved at gå til data mappe, som skal indeholde et sæt filer, der kaldes “Testdb.lck”, “Testdb.log”, “Testdb.properties”og “Testdb.script” (antallet af filer varierer afhængigt af den type database, vi opretter)

Når databasen er oprettet, skal vi oprette en forbindelse til den.

For at gøre dette på Windows, lad os gå til databasen beholder mappen og kør runManagerSwing.bat fil. Dette åbner HSQLDB Database Manager's første skærmbillede, hvor vi kan indtaste forbindelsesoplysningerne:

  • Type: HSQL-databasemotor
  • URL:jdbc: hsqldb: hsql: // localhost / testdb
  • Bruger: “SA” (systemadministrator)
  • Adgangskode: efterlad feltet tomt

På Linux / Unix / Mac, kan vi bruge NetBeans, Eclipse eller IntelliJ IDEA til at oprette databaseforbindelsen gennem IDE's visuelle værktøjer ved hjælp af de samme legitimationsoplysninger.

I et af disse værktøjer er det ligetil at oprette en databasetabel enten ved at udføre et SQL-script i Database Manager eller inden for IDE.

Når vi er tilsluttet, kan vi oprette en kunder bord:

Opret TABLE-kunder (id INT IKKE NULL, navn VARCHAR (45), e-mail VARCHAR (45), PRIMÆR NØGLE (ID)); 

Med blot et par enkle trin har vi oprettet en filbaseret HSQLDB-database indeholdende en kunder bord.

3.2. Det application.properties Fil

Hvis vi ønsker at oprette forbindelse til den tidligere filbaserede database fra Spring Boot, er her de indstillinger, vi skal medtage i application.properties fil:

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 = opdatering 

Alternativt, hvis vi bruger en hukommelsesdatabase, skal vi bruge disse:

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 = opret 

Bemærk venligst DB_CLOSE_DELAY = -1 parameter tilføjet til slutningen af ​​URL-adressen til databasen. Når vi arbejder med en hukommelsesdatabase, skal vi specificere dette, så JPA-implementeringen, som er i dvaletilstand, lukker ikke databasen, mens applikationen kører.

4. Den Kunde Enhed

Med indstillingerne for databaseforbindelsen allerede konfigureret, skal vi derefter definere vores Kunde enhed:

@Entity @Table (name = "kunder") offentlig klasse kunde {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat lang id; privat strengnavn; privat streng e-mail; // standardkonstruktører / settere / getters / toString} 

5. Den Kunde Datalager

Derudover er vi nødt til at implementere et tyndt persistenslag, som giver os mulighed for at have grundlæggende CRUD-funktionalitet på vores Kunde JPA-enheder.

Vi kan nemt implementere dette lag ved bare at udvide CrudRepository grænseflade:

@Repository offentlig grænseflade CustomerRepository udvider CrudRepository {}

6. Test af Kunde Datalager

Endelig skal vi sørge for, at Spring Boot faktisk kan oprette forbindelse til HSQLDB. Vi kan let opnå dette ved bare at teste lagerlagret.

Lad os begynde at teste lageret findById () og findAll () metoder:

@RunWith (SpringRunner.class) @SpringBootTest offentlig klasse CustomerRepositoryTest {@Autowired private CustomerRepository customerRepository; @Test offentligt ugyldigt nårFindingCustomerById_thenCorrect () {customerRepository.save (ny kunde ("John", "[email protected]")); assertThat (customerRepository.findById (1L)). isInstanceOf (Optional.class); } @Test offentlig ugyldigt nårFindingAllCustomers_thenCorrect () {customerRepository.save (ny kunde ("John", "[email protected]")); customerRepository.save (ny kunde ("Julie", "[email protected]")); assertThat (customerRepository.findAll ()). isInstanceOf (List.class); }} 

Lad os endelig teste Gemme() metode:

@Test offentligt ugyldigt nårSavingCustomer_thenCorrect () {customerRepository.save (ny kunde ("Bob", "[email protected]")); Kundekunde = customerRepository.findById (1L) .orElseGet (() -> ny kunde ("john", "[email protected]")); assertThat (customer.getName ()). erEqualTo ("Bob"); }

7. Konklusion

I denne artikel vi lærte at integrere Spring Boot med HSQLDB, og hvordan man bruger enten en filbaseret eller in-memory-database til udvikling af et grundlæggende JPA-lager.

Som sædvanligt er alle kodeeksempler vist i denne artikel tilgængelige på GitHub.