Introduktion til Spring Data JDBC

1. Oversigt

Spring Data JDBC er en persistensramme, der ikke er så kompleks som Spring Data JPA. Det giver ikke cache, doven indlæsning, bagudskrivning eller mange andre funktioner i JPA. Ikke desto mindre har den sin egen ORM og giver de fleste af de funktioner, vi bruger med Spring Data JPA som kortlagte enheder, arkiver, forespørgselsnotater og JdbcTemplate.

En vigtig ting at huske på er, at Spring Data JDBC tilbyder ikke skemegenerering. Som et resultat er vi ansvarlige for eksplicit oprettelse af skemaet.

2. Tilføjelse af forårsdata JDBC til projektet

Spring Data JDBC er tilgængelig for Spring Boot-applikationer med JDBC-afhængighedsstarter. Denne afhængighedsstarter bringer dog ikke databasedriveren. Denne beslutning skal træffes af udvikleren. Lad os tilføje afhængighedsstarter til Spring Data JPA:

 org.springframework.boot spring-boot-starter-data-jdbc 

I dette eksempel bruger vi H2-databasen. Som vi nævnte tidligt, tilbyder Spring Data JDBC ikke skema generation. I et sådant tilfælde kan vi oprette en brugerdefineret skema.sql fil, der har SQL DDL-kommandoer til oprettelse af skemaobjekter. Spring Boot vælger automatisk denne fil og bruger den til at oprette databaseobjekter.

3. Tilføjelse af enheder

Som med de andre Spring Data-projekter bruger vi annoteringer til at kortlægge POJO'er med databasetabeller. I Spring Data JDBC, enheden skal have en @Id. Spring Data JDBC bruger @Id kommentar til identifikation af enheder.

Svarende til Spring Data JPA bruger Spring Data JDBC som standard en navngivningsstrategi, der kortlægger Java-enheder til relationelle databasetabeller og attributter til kolonnenavne. Som standard kortlægges Camel Case-navnene på enheder og attributter til slangesagnavne på henholdsvis tabeller og kolonner. For eksempel en Java-enhed med navnet Adressebog er tilknyttet en navngivet databasetabel adressebog.

Vi kan også kortlægge enheder og attributter med tabeller og kolonner eksplicit ved hjælp af @Bord og @Kolonne kommentarer. For eksempel har vi nedenfor defineret den enhed, som vi skal bruge i dette eksempel:

offentlig klasseperson {@Id privat lang id; privat streng fornavn; privat streng efternavn; // konstruktører, getters, setters}

Vi behøver ikke at bruge kommentaren @Bord eller @Kolonne i Person klasse. Standardnavngivningsstrategien for Spring Data JDBC udfører alle tilknytninger implicit mellem enheden og tabellen.

4. Erklæring om JDBC-arkiver

Spring Data JDBC bruger en syntaks, der svarer til Spring Data JPA. Vi kan oprette et Spring Data JDBC-lager ved at udvide Datalager, CrudRepository eller PagingAndSortingRepository interface. Ved at implementere CrudRepository, modtager vi implementeringen af ​​de mest anvendte metoder som f.eks Gemme, sletog findById, blandt andre.

Lad os oprette et JDBC-arkiv, som vi skal bruge i vores eksempel:

@Repository offentlig grænseflade PersonRepository udvider CrudRepository {}

Hvis vi har brug for paginering og sorteringsfunktioner, ville det bedste valg være at udvide PagingAndSortingRepository interface.

5. Tilpasning af JDBC-arkiver

På trods af CrudRepository indbyggede metoder, er vi nødt til at oprette vores metoder til specifikke sager. En vigtig ting at bemærke er, at Spring Data JDBC understøtter ikke afledte forespørgsler. Dette betyder, at vi ikke bare kan skrive metodens navn og forvente, at Spring Data JDBC genererer forespørgslen.

Hver gang vi skriver en brugerdefineret metode, skal vi dekorere den med @Forespørgsel kommentar. Inde i @Forespørgsel kommentar, vi tilføjer vores SQL-kommando. I Spring Data JDBC skriver vi forespørgsler i almindelig SQL. Vi bruger ikke noget højere niveau-forespørgselssprog som JPQL. Som et resultat bliver applikationen tæt koblet med databaseleverandøren.

Af denne grund bliver det også sværere at skifte til en anden database.

En anden vigtig forskel er det Spring Data JDBC understøtter ikke henvisning til parametre med indeksnumre. I denne version af Spring Data JDBC, vi kan kun henvise til parametre efter navn.

Med @Modifying annotation, kan vi kommentere forespørgselsmetoder, der ændrer enheden.

Lad os nu tilpasse vores Personopbevaring med en ikke-modificerende forespørgsel og en ændringsforespørgsel:

@Repository offentlig grænseflade PersonRepository udvider CrudRepository {@Query ("vælg * fra person, hvor first_name =: firstName") Liste findByFirstName (@Param ("firstName") String firstName); @Modifying @Query ("UPDATE person SET first_name =: name WHERE id =: id") boolean updateByFirstName (@Param ("id") Long id, @Param ("name") String name); }

6. Udfylde databasen

Endelig er vi nødt til at udfylde databasen med data, der skal tjene til at teste Spring Data JDBC-arkivet, vi oprettede ovenfor. Så vi opretter en database såmaskine, der indsætter dummy data. Lad os tilføje implementeringen af ​​database seeder til dette eksempel:

@Component public class DatabaseSeeder {@Autowired private JdbcTemplate jdbcTemplate; offentlig ugyldig insertData () {jdbcTemplate.execute ("INSERT INTO Person (first_name, last_name) VALUES ('Victor', 'Hugo')"); jdbcTemplate.execute ("INSERT INTO Person (first_name, last_name) VALUES ('Dante', 'Alighieri')"); jdbcTemplate.execute ("INSERT INTO Person (first_name, last_name) VALUES ('Stefan', 'Zweig')"); jdbcTemplate.execute ("INSERT INTO Person (first_name, last_name) VALUES ('Oscar', 'Wilde')"); }}

Som set ovenfor bruger vi Spring JDBC til at udføre INDSÆT udsagn. Især Spring JDBC håndterer forbindelsen til databasen og lader os udføre SQL-kommandoer ved hjælp af JdbcTemplates. Denne løsning er meget fleksibel, fordi vi har fuld kontrol over de udførte forespørgsler.

7. Konklusion

For at opsummere tilbyder Spring Data JDBC en løsning, der er så enkel som at bruge Spring JDBC - der er ingen magi bag det. Ikke desto mindre tilbyder det også et flertal af funktioner, som vi er vant til at bruge Spring Data JPA.

En af de største fordele ved Spring Data JDBC er den forbedrede ydeevne ved adgang til databasen sammenlignet med Spring Data JPA. Dette skyldes Spring Data JDBC kommunikere direkte til databasen. Spring Data JDBC indeholder ikke det meste af Spring Data-magien, når du spørger til databasen.

En af de største ulemper ved brug af Spring Data JDBC er afhængigheden af ​​databaseleverandøren. Hvis vi beslutter at ændre databasen fra MySQL til Oracle, Vi skal muligvis håndtere problemer, der opstår fra databaser, der har forskellige dialekter.

Implementeringen af ​​denne Spring Data JDBC tutorial kan findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found