Úvod do jarných dát JDBC

1. Prehľad

Spring Data JDBC je perzistenčný rámec, ktorý nie je taký zložitý ako Spring Data JPA. Neposkytuje vyrovnávaciu pamäť, lenivé načítanie, zápis za sebou ani mnoho ďalších funkcií protokolu JPA. Napriek tomu má svoje vlastné ORM a poskytuje väčšinu funkcií, ktoré používame s Spring Data JPA ako mapované entity, archívy, anotácie dotazov a JdbcTemplate.

Je dôležité mať na pamäti to Spring Data JDBC neponúka generovanie schémy. Vo výsledku sme zodpovední za výslovné vytvorenie schémy.

2. Pridanie jarných údajov JDBC do projektu

Spring Data JDBC je k dispozícii pre aplikácie Spring Boot so štartérom závislostí JDBC. Tento spúšťač závislostí však neprináša ovládač databázy. Toto rozhodnutie musí prijať developer. Pridajme štartér závislostí pre Spring Data JPA:

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

V tomto príklade používame databázu H2. Ako sme už spomenuli skôr, Spring Data JDBC neponúka generovanie schém. V takom prípade môžeme vytvoriť zvyk schema.sql súbor, ktorý bude mať príkazy SQL DDL na vytváranie objektov schémy. Spring Boot automaticky vyberie tento súbor a použije ho na vytváranie databázových objektov.

3. Pridávanie entít

Rovnako ako v prípade iných projektov Spring Data, aj v tomto prípade používame anotácie na mapovanie POJO databázovými tabuľkami. V Spring Data JDBC, entita musí mať @Id. Jarné dáta JDBC používa @Id anotácia na identifikáciu entít.

Podobne ako Spring Data JPA, Spring Data JDBC štandardne používa stratégiu pomenovania, ktorá mapuje entity Java na tabuľky relačných databáz a atribúty k názvom stĺpcov. V predvolenom nastavení sú názvy entít a atribútov Camel Case mapované na názvy prípadov hadov tabuliek a stĺpcov. Napríklad entita Java s názvom Adresár je namapovaný na databázovú tabuľku s názvom adresár.

Tiež môžeme mapovať entity a atribúty s tabuľkami a stĺpcami explicitne pomocou znaku @ Tabuľka a @ Stĺpec anotácie. Napríklad nižšie sme definovali entitu, ktorú použijeme v tomto príklade:

public class Person {@Id private long id; private String meno; private String priezvisko; // konštruktory, getre, setre}

Nepotrebujeme používať anotáciu @ Tabuľka alebo @ Stĺpec v Osoba trieda. Predvolená stratégia pomenovania Spring Data JDBC robí všetky mapovania implicitne medzi entitou a tabuľkou.

4. Vyhlásenie za úložiská JDBC

Spring Data JDBC používa syntax podobnú ako Spring Data JPA. Môžeme vytvoriť úložisko Spring Data JDBC rozšírením Úložisko, CrudRepository alebo PagingAndSortingRepository rozhranie. Implementáciou Úložisko Crud, dostávame implementáciu najbežnejšie používaných metód ako uložiť, vymazaťa findById, medzi inými.

Vytvorme úložisko JDBC, ktoré použijeme v našom príklade:

@Repository verejné rozhranie PersonRepository rozširuje CrudRepository {}

Ak potrebujeme mať funkcie stránkovania a triedenia, najlepšou voľbou by bolo rozšírenie PagingAndSortingRepository rozhranie.

5. Prispôsobenie repozitárov JDBC

Napriek tomu Úložisko Crud integrované metódy, musíme vytvoriť naše metódy pre konkrétne prípady. Je dôležité si uvedomiť, že Spring Data JDBC nepodporuje odvodené dotazy. To znamená, že nemôžeme iba napísať názov metódy a očakávať, že Spring Data JDBC vygeneruje dotaz.

Zakaždým, keď napíšeme vlastnú metódu, musíme ju ozdobiť znakom @Dopyt anotácia. Vnútri @Dopyt anotáciu, pridáme náš príkaz SQL. V Spring Data JDBC píšeme dotazy v obyčajnom SQL. Nepoužívame žiadny dotazovací jazyk na vyššej úrovni ako JPQL. Výsledkom je, že aplikácia bude úzko prepojená s dodávateľom databázy.

Z tohto dôvodu je tiež ťažšie zmeniť na inú databázu.

Ďalším dôležitým rozdielom je to Spring Data JDBC nepodporuje odkazovanie na parametre s číslami indexov. V tejto verzii Spring Data JDBC Sme schopní iba odkazovať na parametre podľa názvu.

Vďaka @ Úpravy anotáciu, môžeme anotovať metódy dotazu, ktoré upravujú entitu.

Teraz si prispôsobme naše Úložisko osôb s nemodifikujúcim dotazom a modifikujúcim dotazom:

@ Verejné rozhranie úložiska PersonRepository rozširuje 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") String name); }

6. Vyplnenie databázy

Na záver musíme databázu naplniť údajmi, ktoré budú slúžiť na testovanie jarného úložiska JDBC, ktoré sme vytvorili vyššie. Takže vytvoríme databázový sejač, ktorý bude vkladať fiktívne údaje. Pre tento príklad pridajme implementáciu databázového sejača:

@ Komponenta verejná trieda 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')"); }}

Ako je vidieť vyššie, na vykonávanie súboru používame Spring JDBC VLOŽTE Vyhlásenia. Najmä Spring JDBC spracováva spojenie s databázou a umožňuje nám vykonávať príkazy SQL pomocou JdbcTemplates. Toto riešenie je veľmi flexibilné, pretože nad vykonanými dotazmi máme úplnú kontrolu.

7. Záver

Ak to zhrnieme, Spring Data JDBC ponúka riešenie, ktoré je také jednoduché ako používanie Spring JDBC - nie je za tým nijaké kúzlo. Ponúka však aj väčšinu funkcií, na ktoré sme zvyknutí používať Spring Data JPA.

Jednou z najväčších výhod Spring Data JDBC je lepší výkon pri prístupe k databáze v porovnaní s Spring Data JPA. Je to spôsobené jarnými údajmi JDBC komunikuje priamo do databázy. Jarné dáta JDBC pri dotazovaní do databázy neobsahuje väčšinu magie jarných dát.

Jednou z najväčších nevýhod pri používaní Spring Data JDBC je závislosť od dodávateľa databázy. Ak sa rozhodneme zmeniť databázu z MySQL na Oracle, možno sa budeme musieť vyrovnať s problémami, ktoré vyplývajú z databáz s rôznymi dialektmi.

Implementáciu tohto tutoriálu Spring Data JDBC nájdete na GitHub.