Integrering av fjærstøvel med HSQLDB

1. Oversikt

Spring Boot gjør det veldig enkelt å jobbe med forskjellige databasesystemer, uten bryet med manuell avhengighetsadministrasjon.

Mer spesifikt gir Spring Data JPA starter all funksjonaliteten som kreves for sømløs integrasjon med flere Datakilde implementeringer.

I denne veiledningen, vi lærer hvordan vi kan integrere Spring Boot med HSQLDB.

2. Maven-avhengighetene

For å demonstrere hvor enkelt det er å integrere Spring Boot med HSQLDB, Vi lager et enkelt JPA-lagringslag som utfører CRUD-operasjoner på kundenheter ved hjelp av en HSQLDB-database i minnet.

Her er vårstartstarteren som vi bruker for å få prøvelagringslaget vårt i gang:

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

Vær oppmerksom på at vi også har inkludert HSQLDB-avhengigheten. Uten den vil Spring Boot prøve å konfigurere en automatisk Datakilde bønne og et JDBC-tilkoblingsbasseng for oss gjennom HikariCP.

Som en konsekvens, hvis vi ikke spesifiserer en gyldig Datakilde avhengighet i vår pom.xml fil, får vi en byggfeil.

I tillegg, la oss sørge for å sjekke den nyeste versjonen av spring-boot-starter-data-jpa på Maven Central.

3. Koble til en HSQLDB-database

For å utøve vårt demo-depotlag bruker vi en database i minnet. Det er imidlertid mulig å jobbe med filbaserte databaser også. Vi vil utforske hver av disse metodene i avsnittene nedenfor.

3.1. Kjører en ekstern HSQLDB-server

La oss ta en titt på hvordan du får en ekstern HSQLDB-server til å kjøre og oppretter en filbasert database. Installasjon av HSQLDB og kjøring av serveren er generelt sett grei.

Her er trinnene vi bør følge:

  • Først laster vi ned HSQLDB og pakker den ut til en mappe
  • Siden HSQLDB ikke gir en standard database utenom boksen, oppretter vi en som heter “Testdb” for eksempel formål
  • Vi starter en ledetekst og navigerer til HSQLDB data mappe
  • Innen data -mappe, kjører vi følgende kommando:
    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file.testdb --dbname0.testdb
  • Ovennevnte kommando starter HSQLDB-serveren og oppretter databasen vår hvis kildefiler blir lagret i data mappe
  • Vi kan sørge for at databasen faktisk er opprettet ved å gå til data mappe, som skal inneholde et sett med filer som heter “Testdb.lck”, “Testdb.log”, “Testdb.properties”, og “Testdb.script” (antall filer varierer avhengig av hvilken type database vi lager)

Når databasen er satt opp, må vi opprette en forbindelse til den.

For å gjøre dette på Windows, la oss gå til databasen søppel mappen og kjør runManagerSwing.bat fil. Dette åpner første skjermbilde for HSQLDB Database Manager, hvor vi kan angi tilkoblingsinformasjonen:

  • Type: HSQL Database Engine
  • URL:jdbc: hsqldb: hsql: // localhost / testdb
  • Bruker: “SA” (systemadministrator)
  • Passord: la feltet stå tomt

På Linux / Unix / Mac, kan vi bruke NetBeans, Eclipse eller IntelliJ IDEA til å opprette databaseforbindelsen gjennom IDEs visuelle verktøy, ved hjelp av samme legitimasjon.

I noen av disse verktøyene er det greit å lage en databasetabell enten ved å utføre et SQL-skript i Database Manager eller innenfor IDE.

Når vi er koblet til, kan vi opprette en kunder bord:

OPPRETT TABELLkunder (id INT IKKE NULL, navn VARCHAR (45), e-post VARCHAR (45), PRIMÆR NØKKEL (ID)); 

Med bare noen få enkle trinn har vi opprettet en filbasert HSQLDB-database som inneholder en kunder bord.

3.2. De application.properties Fil

Hvis vi ønsker å koble til den forrige filbaserte databasen fra Spring Boot, er her innstillingene vi bør inkludere 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 = oppdatering 

Alternativt, hvis vi bruker en minnedatabase, bør vi bruke 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 = opprett 

Vær oppmerksom på DB_CLOSE_DELAY = -1 parameter lagt til slutten av URL-en til databasen. Når vi jobber med en database i minnet, må vi spesifisere dette, så JPA-implementeringen, som er i dvalemodus, lukker ikke databasen mens applikasjonen kjører.

4. Den Kunde Enhet

Med innstillingene for databaseforbindelsen allerede konfigurert, må vi definere våre Kunde enhet:

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

5. Den Kunde Oppbevaringssted

I tillegg må vi implementere et tynt utholdenhetslag som gjør at vi kan ha grunnleggende CRUD-funksjonalitet på vår Kunde JPA-enheter.

Vi kan enkelt implementere dette laget ved bare å utvide CrudRepository grensesnitt:

@Repository offentlig grensesnitt CustomerRepository utvider CrudRepository {}

6. Testing av Kunde Oppbevaringssted

Til slutt bør vi sørge for at Spring Boot faktisk kan koble til HSQLDB. Vi kan enkelt oppnå dette ved å bare teste lagringslaget.

La oss begynne å teste lageret findById () og findAll () metoder:

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

Til slutt, la oss teste lagre() metode:

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

7. Konklusjon

I denne artikkelen, vi lærte å integrere Spring Boot med HSQLDB, og hvordan du kan bruke enten en filbasert eller minne-database i utviklingen av et grunnleggende JPA-depotlag.

Som vanlig er alle kodeeksemplene vist i denne artikkelen tilgjengelig på GitHub.