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:
- Oldalméret
- Aktuális oldalszám
- 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:
- 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
- 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.