CrudRepository, JpaRepository a PagingAndSortingRepository v jarných dátach

1. Prehľad

V tomto rýchlom článku sa zameriame na rôzne druhy rozhraní úložiska Spring Data a ich funkčnosť. Dotkneme sa:

  • Úložisko Crud
  • PagingAndSortingRepository
  • JpaRepository

Jednoducho povedané, každé úložisko v Spring Data rozširuje všeobecné Úložisko rozhranie, ale okrem toho majú odlišné funkcie.

2. Jarné úložiská údajov

Začnime s JpaRepository - ktorý sa rozširuje PagingAndSortingRepository a na druhej strane Úložisko Crud.

Každá z nich definuje svoju vlastnú funkčnosť:

  • Úložisko Crud poskytuje funkcie CRUD
  • PagingAndSortingRepository poskytuje metódy na stránkovanie a triedenie záznamov
  • JpaRepository poskytuje metódy súvisiace s JPA, ako napríklad vyprázdnenie kontextu vytrvalosti a mazanie záznamov v dávke

A preto z dôvodu tohto dedičského vzťahu: JpaRepository obsahuje úplné API z Úložisko Crud a PagingAndSortingRepository.

Keď nepotrebujeme úplnú funkčnosť poskytovanú serverom JpaRepository a PagingAndSortingRepository, môžeme jednoducho použiť Úložisko Crud.

Poďme sa teraz pozrieť na rýchly príklad, aby sme týmto API lepšie porozumeli.

Začneme jednoduchým Výrobok subjekt:

@Entity public class Product {@Id private long id; súkromné ​​meno reťazca; // zakladatelia a zakladatelia}

A poďme implementovať jednoduchú operáciu - nájdite a Výrobok podľa názvu:

@ Verejné rozhranie úložiska ProductRepository rozširuje JpaRepository {Product findByName (reťazec productName); }

To je všetko. Jarné dátové úložisko automaticky vygeneruje implementáciu na základe názvu, ktorý sme jej poskytli.

Toto bol samozrejme veľmi jednoduchý príklad; tu môžete ísť hlbšie do Spring Data JPA.

3. Úložisko Crud

Poďme sa teraz pozrieť na kód pre Úložisko Crud rozhranie:

verejné rozhranie CrudRepository rozširuje úložisko {S save (S entity); T findOne (ID primaryKey); Iterovateľný findAll (); Long count (); void delete (entita T); boolean existuje (ID primaryKey); }

Všimnite si typickú funkčnosť CRUD:

  • uložiť (...) - save Iterable subjektov. Tu môžeme odovzdať viac objektov a uložiť ich hromadne
  • findOne (...) - získať jednu entitu na základe odovzdanej hodnoty primárneho kľúča
  • findAll () - dostať Iterable všetkých dostupných entít v databáze
  • count () - rpočet celkových entít v tabuľke
  • vymazať (…) - vymazať entitu na základe odovzdaného objektu
  • existuje (…) - na základe hodnoty odovzdaného primárneho kľúča overiť, či entita existuje

Toto rozhranie vyzerá dosť všeobecne a jednoducho, ale v skutočnosti poskytuje všetky základné abstrakcie dotazov potrebné v aplikácii.

4. PagingAndSortingRepository

Poďme sa teraz pozrieť na ďalšie rozhranie úložiska, ktoré sa rozširuje Úložisko Crud:

verejné rozhranie PagingAndSortingRepository rozširuje CrudRepository {Iterable findAll (triedenie zoradenia); Stránka findAll (pagable pageable); }

Toto rozhranie poskytuje metódu findAll (stránkovateľné stránkovateľné), ktorý je kľúčom k implementácii Stránkovanie.

Pri použití Stránkovateľné, vytvoríme a Stránkovateľné objekt s určitými vlastnosťami a musíme určiť aspoň:

  1. Veľkosť stránky
  2. Číslo aktuálnej stránky
  3. Triedenie

Predpokladajme teda, že chceme zobraziť prvú stránku množiny výsledkov zoradenú podľa priezvisko, vzostupne, z ktorých každý nemá viac ako päť záznamov. Takto to môžeme dosiahnuť pomocou a PageRequest a a Triediť definícia:

Sort sort = new Sort (new Sort.Order (Direction.ASC, "lastName")); Pagable pageable = nový PageRequest (0, 5, triedenie);

Pri odovzdaní stránkovateľného objektu do dotazu na údaje Spring sa príslušné výsledky vrátia (prvý parameter z PageRequest je založené na nule).

5. JpaRepository

Na záver sa pozrieme na JpaRepository rozhranie:

verejné rozhranie JpaRepository rozširuje PagingAndSortingRepository {List findAll (); Zoznam findAll (zoradiť zoradiť); Uložiť zoznam (Iterovateľné entity); void flush (); T saveAndFlush (entita T); void deleteInBatch (Iterovateľné entity); }

Opäť sa pozrime na každú z týchto metód v skratke:

  • findAll () - dostať Zoznam všetkých dostupných entít v databáze
  • findAll (...) - dostať Zoznam všetkých dostupných entít a zoradiť ich podľa zadanej podmienky
  • uložiť (...) - save Iterable subjektov. Tu môžeme odovzdať viac objektov, aby sme ich hromadne uložili
  • flush () - fpreneste všetky čakajúce úlohy do databázy
  • saveAndFlush (…) - uložiť entitu a okamžite vypláchnuť zmeny
  • deleteInBatch (…) - odstrániť Iterable subjektov. Tu môžeme odovzdať viac objektov a hromadne ich vymazať

Je zrejmé, že vyššie uvedené rozhranie sa rozširuje PagingAndSortingRepository čo znamená, že má všetky metódy prítomné v Úložisko Crud tiež.

6. Nevýhody jarných úložísk údajov

Okrem všetkých veľmi užitočných výhod týchto úložísk existujú aj niektoré základné nevýhody, ktoré priamo závisia od týchto:

  1. spojíme náš kód s knižnicou a jej konkrétnymi abstrakciami, ako sú napríklad „Stránka“ alebo „Pageable“; to samozrejme nie je pre túto knižnicu jedinečné - musíme však byť opatrní, aby sme neodhalili tieto interné podrobnosti implementácie
  2. predĺžením napr. Úložisko Crud, vystavujeme kompletnú sadu metód perzistencie naraz. To je pravdepodobne dobré aj vo väčšine prípadov, ale mohli by sme sa dostať do situácií, keď by sme chceli získať jemnejšiu kontrolu nad exponovanými metódami, napr. vytvoriť ReadOnlyRepository to nezahŕňa uložiť (...) a vymazať (…) metódy Úložisko Crud

7. Záver

Tento článok sa venoval niektorým stručným, ale dôležitým rozdielom a vlastnostiam rozhraní úložiska Spring Data JPA.

Viac informácií nájdete v seriáli Spring Persistence.