Uvod u Spring Data JDBC

1. Pregled

Spring Data JDBC okvir je trajnosti koji nije tako složen kao Spring Data JPA. Ne pruža predmemoriju, lijeno učitavanje, zaostajanje za pisanjem ili mnoge druge značajke JPA. Ipak, ima vlastiti ORM i pruža većinu značajki koje koristimo s Spring Data JPA poput mapiranih entiteta, spremišta, napomena o upitima i JdbcTemplate.

Važno je imati na umu da je to Spring Data JDBC ne nudi generiranje sheme. Kao rezultat toga, odgovorni smo za eksplicitno stvaranje sheme.

2. Dodavanje proljetnih podataka JDBC u projekt

Spring Data JDBC dostupan je aplikacijama Spring Boot s pokretačem ovisnosti JDBC. Ovaj pokretač ovisnosti, međutim, ne donosi pokretački program baze podataka. Tu odluku mora donijeti programer. Dodajmo pokretač ovisnosti za Spring Data JPA:

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

U ovom primjeru koristimo bazu podataka H2. Kao što smo ranije spomenuli, Spring Data JDBC ne nudi generiranje sheme. U takvom slučaju možemo stvoriti običaj shema.sql datoteku koja će imati SQL DDL naredbe za stvaranje objekata sheme. Spring Boot automatski će odabrati ovu datoteku i koristiti je za stvaranje objekata baze podataka.

3. Dodavanje entiteta

Kao i kod ostalih projekata Spring Data, koristimo napomene za mapiranje POJO-a s tablicama baze podataka. U Spring Data JDBC, entitet mora imati @Iskaznica. Spring Data JDBC koristi @Iskaznica napomena za identifikaciju entiteta.

Slično Spring Data JPA, Spring Data JDBC koristi, prema zadanim postavkama, strategiju imenovanja koja Java entitete preslikava u relacijske tablice baze podataka, a atribute na imena stupaca. Prema zadanim postavkama, nazivi entiteta i atributi Camel mapiraju se u nazive slučajeva zmija tablica, odnosno stupaca. Na primjer, Java entitet s imenom Adresar preslikava se u tablicu baze podataka s imenom Adresar.

Također, entitete i atribute možemo izričito mapirati pomoću tablica i stupaca pomoću @Stol i @Stupac bilješke. Na primjer, dolje smo definirali entitet koji ćemo koristiti u ovom primjeru:

javni razred Osoba {@ ID privatni dugi ID; private String firstName; private String lastName; // konstruktori, getteri, postavljači}

Ne trebamo koristiti bilješku @Stol ili @Stupac u Osoba razred. Zadana strategija imenovanja Spring Data JDBC obavlja sva preslikavanja implicitno između entiteta i tablice.

4. Deklariranje JDBC spremišta

Spring Data JDBC koristi sintaksu koja je slična Spring Data JPA. Prostornim podacima JDBC spremište možemo stvoriti proširivanjem Spremište, CrudRepository ili PagingAndSortingRepository sučelje. Provedbom CrudRepository, primamo primjenu najčešće korištenih metoda poput uštedjeti, izbrisati, i findById, između ostalih.

Stvorimo JDBC spremište koje ćemo koristiti u našem primjeru:

@Repository javno sučelje PersonRepository proširuje CrudRepository {}

Ako trebamo imati značajke paginacije i sortiranja, najbolji izbor bio bi proširiti PagingAndSortingRepository sučelje.

5. Prilagođavanje JDBC spremišta

Bez obzira na CrudRepository ugrađene metode, moramo stvoriti naše metode za određene slučajeve. Jedna važna stvar koju treba napomenuti je Spring Data JDBC ne podržava izvedene upite. To znači da ne možemo samo napisati naziv metode i očekivati ​​da Spring Data JDBC generira upit.

Svaki put kad napišemo prilagođenu metodu, moramo je ukrasiti znakom @Query bilješka. Unutar @Query napomena, dodajemo našu SQL naredbu. U Spring Data JDBC upise pišemo u običnom SQL-u. Ne koristimo nijedan jezik upita na višoj razini kao što je JPQL. Kao rezultat toga, aplikacija postaje usko povezana s dobavljačem baze podataka.

Iz tog razloga postaje teže promijeniti drugu bazu podataka.

Druga važna razlika je ta Spring Data JDBC ne podržava referenciranje parametara s indeksnim brojevima. U ovoj verziji Spring Data JDBC, parametre možemo referencirati samo po imenu.

Uz @Modificiranje napomena, možemo označiti metode upita koje modificiraju entitet.

Sada prilagodimo naš Spremište osoba s ne-modificirajućim upitom i modificirajućim upitom:

Javno sučelje @Repository PersonRepository proširuje CrudRepository {@Query ("select * from person where first_name =: firstName") List findByFirstName (@Param ("firstName") String firstName); @Modifying @Query ("AŽURIRANJE PODEŠAVANJA osobe first_name =: name WHERE id =: id") boolean updateByFirstName (@Param ("id") Long id, @Param ("name") Ime niza); }

6. Popunjavanje baze podataka

Konačno, bazu podataka moramo popuniti podacima koji će služiti za testiranje spremišta Spring Data JDBC koje smo gore stvorili. Dakle, stvorit ćemo alat za sadnju baze podataka koji će umetnuti lažne podatke. Dodajmo implementaciju sadilice baze podataka za ovaj primjer:

@Component javna klasa DatabaseSeeder {@Autowired private JdbcTemplate jdbcTemplate; javna praznina 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')"); }}

Kao što je gore prikazano, koristimo Spring JDBC za izvršavanje UMETNUTI izjave. Konkretno, Spring JDBC obrađuje vezu s bazom podataka i omogućuje nam izvršavanje SQL naredbi pomoću JdbcTemplates. Ovo je rješenje vrlo fleksibilno jer imamo potpunu kontrolu nad izvršenim upitima.

7. Zaključak

Da rezimiramo, Spring Data JDBC nudi rješenje koje je jednostavno kao i korištenje Spring JDBC - iza toga nema čarolije. Unatoč tome, nudi i većinu značajki na koje smo navikli koristiti Spring Data JPA.

Jedna od najvećih prednosti Spring Data JDBC je poboljšana izvedba pri pristupu bazi podataka u usporedbi s Spring Data JPA. To je zbog Spring Data JDBC komunicirajući izravno s bazom podataka. Spring Data JDBC ne sadrži većinu magije Spring Data prilikom upita baze podataka.

Jedan od najvećih nedostataka pri korištenju Spring Data JDBC je ovisnost o dobavljaču baze podataka. Ako odlučimo promijeniti bazu podataka iz MySQL u Oracle, možda ćemo se morati suočiti s problemima koji proizlaze iz baza podataka s različitim dijalektima.

Provedbu ovog vodiča Spring Data JDBC možete pronaći na GitHub-u.