Introduksjon til Spring Data JDBC

1. Oversikt

Spring Data JDBC er et vedvarende rammeverk som ikke er så komplisert som Spring Data JPA. Det gir ikke hurtigbuffer, lat innlasting, etterskriften eller mange andre funksjoner i JPA. Likevel har den sin egen ORM og gir de fleste funksjonene vi bruker med Spring Data JPA som kartlagte enheter, arkiver, spørringsanmerkninger og JdbcTemplate.

En viktig ting å huske på er at Spring Data JDBC tilbyr ikke generering av skjemaer. Som et resultat er vi ansvarlige for å opprette skjemaet eksplisitt.

2. Legge til vårdata JDBC i prosjektet

Spring Data JDBC er tilgjengelig for Spring Boot-applikasjoner med JDBC avhengighetsstarter. Denne avhengighetsstarteren bringer imidlertid ikke databasedriveren. Denne avgjørelsen må tas av utvikleren. La oss legge til avhengighetsstarter for Spring Data JPA:

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

I dette eksemplet bruker vi H2-databasen. Som vi nevnte tidlig, tilbyr ikke Spring Data JDBC skjema generering. I et slikt tilfelle kan vi lage en egendefinert schema.sql filen som har SQL DDL-kommandoene for å opprette skjemaobjektene. Spring Boot velger automatisk denne filen og bruker den til å lage databaseobjekter.

3. Legge til enheter

Som med de andre Spring Data-prosjektene, bruker vi merknader til å kartlegge POJOer med databasetabeller. I Spring Data JDBC, enheten må ha en @Id. Spring Data JDBC bruker @Id kommentar for å identifisere enheter.

I likhet med Spring Data JPA bruker Spring Data JDBC som standard en navngivningsstrategi som tilordner Java-enheter til relasjonelle databasetabeller, og attributter til kolonnenavn. Som standard er Camel Case-navnene på enheter og attributter kartlagt til slangesaksnavn på henholdsvis tabeller og kolonner. For eksempel en Java-enhet som heter Adressebok er kartlagt til en databasetabell som heter adressebok.

Vi kan også kartlegge enheter og attributter med tabeller og kolonner eksplisitt ved å bruke @Bord og @Kolonne kommentarer. For eksempel nedenfor har vi definert enheten vi skal bruke i dette eksemplet:

offentlig klasse Person {@Id privat lang id; privat streng fornavn; privat streng etternavn; // konstruktører, getters, setters}

Vi trenger ikke bruke merknaden @Bord eller @Kolonne i Person klasse. Standard navngivningsstrategi for Spring Data JDBC gjør alle tilknytningene implisitt mellom enheten og tabellen.

4. Erklæring om JDBC-arkiver

Spring Data JDBC bruker en syntaks som ligner på Spring Data JPA. Vi kan lage et Spring Data JDBC-arkiv ved å utvide Oppbevaringssted, CrudRepository, eller PagingAndSortingRepository grensesnitt. Ved å implementere CrudRepository, mottar vi implementeringen av de mest brukte metodene som lagre, slett, og findById, blant andre.

La oss lage et JDBC-arkiv som vi skal bruke i vårt eksempel:

@Repository offentlig grensesnitt PersonRepository utvider CrudRepository {}

Hvis vi trenger å ha paginering og sorteringsfunksjoner, vil det beste valget være å utvide PagingAndSortingRepository grensesnitt.

5. Tilpasse JDBC-arkiver

Til tross for CrudRepository innebygde metoder, må vi lage våre metoder for spesifikke saker. En viktig ting å merke seg er at Spring Data JDBC støtter ikke avledede spørsmål. Dette betyr at vi ikke bare kan skrive metodens navn og forvente at Spring Data JDBC genererer spørringen.

Hver gang vi skriver en tilpasset metode, må vi dekorere den med @Spørsmål kommentar. Inne i @Spørsmål merknad, legger vi til vår SQL-kommando. I Spring Data JDBC skriver vi spørsmål i vanlig SQL. Vi bruker ikke noe høyere nivå spørringsspråk som JPQL. Som et resultat blir applikasjonen tett koblet med databaseleverandøren.

Av denne grunn blir det også vanskeligere å bytte til en annen database.

En annen viktig forskjell er at Spring Data JDBC støtter ikke referanse til parametere med indeksnummer. I denne versjonen av Spring Data JDBC, vi kan bare referere til parametere etter navn.

Med @Modifying kommentar, kan vi kommentere spørringsmetoder som endrer enheten.

La oss nå tilpasse våre PersonRepository med et ikke-modifiserende spørsmål og et modifiserende spørsmål:

@Repository public interface PersonRepository utvider CrudRepository {@Query ("select * from person where first_name =: firstName") List findByFirstName (@Param ("firstName") String firstName); @Modifying @Query ("UPDATE person SET first_name =: name WHERE id =: id") boolean updateByFirstName (@Param ("id") Long id, @Param ("name") Strengnavn); }

6. Fyll ut databasen

Til slutt må vi fylle ut databasen med data som skal brukes til å teste Spring Data JDBC-arkivet vi opprettet ovenfor. Så vi skal lage en database såmaskin som vil sette inn dummy data. La oss legge til implementeringen av database seeder for dette eksemplet:

@Component public class DatabaseSeeder {@Autowired private JdbcTemplate jdbcTemplate; public void 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 sett ovenfor bruker vi Spring JDBC for å utføre SETT INN uttalelser. Spesielt håndterer Spring JDBC forbindelsen med databasen og lar oss utføre SQL-kommandoer ved hjelp av JdbcTemplates. Denne løsningen er veldig fleksibel fordi vi har full kontroll over de utførte spørsmålene.

7. Konklusjon

For å oppsummere tilbyr Spring Data JDBC en løsning som er like enkel som å bruke Spring JDBC - det er ingen magi bak den. Likevel tilbyr den også et flertall av funksjonene vi er vant til å bruke Spring Data JPA.

En av de største fordelene med Spring Data JDBC er forbedret ytelse når du får tilgang til databasen sammenlignet med Spring Data JPA. Dette skyldes Spring Data JDBC kommunisere direkte til databasen. Spring Data JDBC inneholder ikke det meste av Spring Data-magien når du spør om databasen.

En av de største ulempene ved bruk av Spring Data JDBC er avhengigheten av databaseleverandøren. Hvis vi bestemmer oss for å endre databasen fra MySQL til Oracle, Vi må kanskje håndtere problemer som oppstår fra databaser med forskjellige dialekter.

Implementeringen av denne Spring Data JDBC-opplæringen finner du på GitHub.


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