CrudRepository, JpaRepository és PagingAndSortingRepository a tavaszi adatokban

1. Áttekintés

Ebben a rövid cikkben különféle típusú Spring Data adattár interfészekre és azok funkcionalitására fogunk koncentrálni. Érintjük:

  • CrudRepository
  • PagingAndSortingRepository
  • JpaRepository

Egyszerűen fogalmazva, a Spring Data minden adattára kiterjeszti az általános Adattár felületen, de ezen túl mindegyikük más-más funkcióval rendelkezik.

2. Tavaszi adattárak

Kezdjük a JpaRepository-val - amely kiterjed PagingAndSortingRepository és viszont a CrudRepository.

Ezek mindegyike meghatározza saját funkcionalitását:

  • CrudRepository CRUD funkciókat biztosít
  • PagingAndSortingRepository módszereket nyújt a lapozás és a rekordok rendezése céljából
  • JpaRepository JPA-val kapcsolatos módszereket biztosít, például a perzisztencia-kontextus kiürítését és a kötegelt rekordok törlését

És ezért ezen öröklési viszony miatt a JpaRepository A teljes API-t tartalmazza CrudRepository és PagingAndSortingRepository.

Amikor nincs szükségünk a teljes funkcionalitásra JpaRepository és PagingAndSortingRepository, egyszerűen használhatjuk a CrudRepository.

Most nézzünk meg egy gyors példát, hogy jobban megértsük ezeket az API-kat.

Kezdjük egy egyszerűvel Termék entitás:

@Entity public class Product {@Id private long id; privát karakterlánc neve; // szerelők és beállítók}

És hajtsunk végre egy egyszerű műveletet - keresse meg a Termék neve alapján:

@Repository nyilvános felület A ProductRepository kiterjeszti a JpaRepository {Product findByName (String termékNév); }

Ez minden. A tavaszi adattár automatikusan létrehozza a megvalósítást az általunk megadott név alapján.

Ez természetesen nagyon egyszerű példa volt; itt elmélyülhet a Spring Data JPA.

3. CrudRepository

Vessünk egy pillantást a CrudRepository felület:

nyilvános felület A CrudRepository kiterjeszti a Tárházat {S save (S entitás); T findOne (ID primer kulcs); Iterálható findAll (); Hosszú számolás (); void delete (T entitás); logikai érték létezik (ID primaryKey); }

Figyelje meg a tipikus CRUD funkciókat:

  • mentés (…) - save an Iterálható entitások. Itt több objektumot átadhatunk, hogy azokat kötegben menthessük
  • találj egyet(…) - egyetlen entitás megszerzése az átadott elsődleges kulcs értéke alapján
  • Találd meg mindet() - kap egy Iterálható az adatbázisban elérhető összes entitás
  • gróf () - returnálja az összes entitás számát egy táblázatban
  • töröl(…) - töröljön egy entitást az átadott objektum alapján
  • létezik (…) - ellenőrizze, hogy létezik-e entitás az átadott elsődleges kulcs értéke alapján

Ez a felület meglehetősen általánosnak és egyszerűnek tűnik, de valójában biztosítja az alkalmazáshoz szükséges összes alapvető lekérdezés-absztrakciót.

4. PagingAndSortingRepository

Most nézzünk meg egy másik tároló felületet, amely kiterjed CrudRepository:

nyilvános felület A PagingAndSortingRepository kiterjeszti a CrudRepository {Iterable findAll (Rendezés rendezése); Page findAll (lapozható lapozható); }

Ez az interfész biztosít egy módszert findAll (lapozható lapozható), ami a megvalósítás kulcsa Lapszámozás.

Használat során Lapozható, létrehozunk egy Lapozható objektum bizonyos tulajdonságokkal, és meg kell adnunk legalább:

  1. Oldalméret
  2. Aktuális oldalszám
  3. Válogató

Tehát tegyük fel, hogy az eredményhalmaz első oldalát rendezni szeretnénk vezetéknév, növekvő, egyenként legfeljebb öt rekord van. Így érhetjük el ezt az a használatával PageRequest és a Fajta meghatározás:

Rendezés rendezés = új Rendezés (új Rendezés.Order (Irány.ASC, "vezetéknév")); Lapozható lapozható = new PageRequest (0, 5, rendezés);

A lapozható objektum átadása a tavaszi adat lekérdezésnek a kérdéses eredményeket adja vissza (a PageRequest nulla alapú).

5. JpaRepository

Végül megnézzük a JpaRepository felület:

nyilvános felület A JpaRepository kiterjeszti a PagingAndSortingRepository {List findAll (); List findAll (rendezés rendezése); Lista mentése (ismétlődő entitások); void flush (); T saveAndFlush (T entitás); void deleteInBatch (Iterálható entitások); }

Ismét nézzük meg röviden ezeket a módszereket:

  • Találd meg mindet() - kap egy Lista az adatbázisban elérhető összes entitás
  • Találd meg mindet(…) - kap egy Lista az összes rendelkezésre álló entitás közül, és a megadott feltétel szerint rendezze őket
  • mentés (…) - save an Iterálható entitások. Itt több objektumot is átadhatunk, hogy kötegben elmenthessük őket
  • öblítés () - fösszes függőben lévő feladatot az adatbázisba
  • saveAndFlush (…) - mentse az entitást, és azonnal öblítse le a változásokat
  • deleteInBatch (…) - egy an törlése Iterálható entitások. Itt több objektumot is átadhatunk, hogy egy tételben törölhessük őket

Nyilvánvaló, hogy a fenti interfész kiterjed PagingAndSortingRepository ami azt jelenti, hogy az összes módszer jelen van a CrudRepository is.

6. A tavaszi adattárak hátrányai

Ezen adattárak minden nagyon hasznos előnyén túl van néhány alapvető hátránya is, amelyek közvetlenül ezektől függenek:

  1. párosítjuk kódunkat a könyvtárhoz és annak speciális absztrakcióihoz, például a „Page” vagy a „Pageable”; ez természetesen nem egyedülálló ebben a könyvtárban - de vigyáznunk kell, hogy ne tegyük ki ezeket a belső megvalósítási részleteket
  2. kiterjesztésével pl. CrudRepository, egy teljes kitartási módszerkészletet teszünk ki egyszerre. Ez valószínűleg a legtöbb esetben is rendben van, de előfordulhat, hogy olyan helyzetekbe ütközhetünk, ahol szeretnénk finomabb kontrollt szerezni a kitett módszerek felett, pl. létrehozni a ReadOnlyRepository amely nem tartalmazza a mentés(…) és töröl(…) módszerei CrudRepository

7. Következtetés

Ez a cikk a Spring Data JPA repository interfészeinek néhány rövid, de fontos különbségével és jellemzőivel foglalkozott.

További információért tekintse meg a Tavaszi kitartás című sorozatot.