Lekérdező entitások dátum és idő szerint a Spring Data JPA-val
1. Bemutatkozás
Ebben a gyors bemutatóban megtudhatjuk, hogyan lehet lekérdezni az entitásokat dátum szerint a Spring Data JPA segítségével.
Először frissítjük memóriánkat arról, hogyan lehet a dátumokat és időpontokat a JPA segítségével feltérképezni.
Ezután létrehozunk egy dátum- és időmezővel rendelkező entitást, valamint egy Spring Data-adattárat az entitások lekérdezéséhez.
2. Dátumok és idők feltérképezése a JPA-val
Kezdőknek, áttekintünk egy kis elméletet a dátumoknak a JPA-val történő feltérképezéséről. Azt kell tudni, hogy el kell döntenünk, hogy képviselni akarjuk-e:
- Csak egy dátum
- Csak egy idő
- Vagy mindkettő
A (nem kötelező) @Oszlop megjegyzés, hozzá kell adnunk a @Időbeli annotáció annak megadásához, hogy mit jelent a mező.
Ez a megjegyzés olyan paramétert vesz fel, amelynek értéke TemporalType enum:
- TemporalType.DATE
- TemporalType.TIME
- TemporalType.TIMESTAMP
Részletes cikk a dátumokkal és az időkkel kapcsolatos képekkel a JPA-val kapcsolatban itt található.
3. A gyakorlatban
A gyakorlatban, miután az entitásaink helyesen vannak beállítva, nem kell sokat dolgozni, hogy lekérdezzük őket a Spring Data JPA segítségével. Csak használnunk kell lekérdezési módszerek, @Query annotáció.
Minden tavaszi Data JPA mechanizmus rendben működik.
Nézzünk meg néhány példát a Spring Data JPA-val dátum és idő szerint lekérdezett entitásokról.
3.1. Entitás beállítása
Kezdetnek tegyük fel, hogy van egy Cikk entitás, közzétételi dátummal, közzétételi idővel, létrehozási dátummal és idővel:
@Entity public class Article {@Id @GeneratedValue Integer id; @Temporal (TemporalType.DATE) közzététel dátuma; @Temporal (TemporalType.TIME) Dátum közzétételi idő; @Temporal (TemporalType.TIMESTAMP) Dátum létrehozásaDateTime; }
A bemutatás dátumát és idejét két területre osztottuk a bemutató célból. Így a három időbeli típus képviselteti magát.
3.2. Az entitások lekérdezése
Most, hogy entitásunk fel van állítva, hozzunk létre egy Spring Data-t adattár hogy megkérdezzem azokat a cikkeket.
Három módszert hozunk létre, a Spring Data JPA számos funkciójának felhasználásával:
nyilvános felület ArticleRepository kiterjeszti a JpaRepository {List findAllByPublicationDate (Date publishingDate); List findAllByPublicationTimeBetween (Dátum közzétételTimeStart, Dátum közzétételTimeEnd); @Query ("válasszon ki egy a cikkből, ahol a.creationDateTime <=: creationDateTime") List findAllWithCreationDateTimeBefore (@Param ("creationDateTime") Date creationDateTime); }
Tehát három módszert definiáltunk:
- findAllByPublicationDate amely beolvassa az adott napon megjelent cikkeket
- findAllByPublicationTimeBetween amely két adott óra között megjelent cikkeket tölti le
- és findAllWithCreationDateTimeBefore amely egy adott dátum és időpont előtt készített cikkeket tölti le
A két első módszer a Spring Data-ra támaszkodik lekérdezési módszerek mechanizmus és utoljára @Lekérdezés annotáció.
Végül ez nem változtatja meg a dátumok kezelésének módját. Az első módszer csak a paraméter dátum részét veszi figyelembe.
A második csak a paraméterek idejét veszi figyelembe. És az utolsó mind a dátumot, mind az időt használja.
3.3. Tesztelje a lekérdezéseket
Az utolsó dolog, amit tennünk kell, hogy néhány tesztet fel kell állítanunk annak ellenőrzésére, hogy ezek a lekérdezések a várt módon működnek-e.
Először importálunk néhány adatot az adatbázisunkba, majd létrehozzuk a tesztosztályt, amely ellenőrzi a tárház egyes módszereit:
@RunWith (SpringRunner.class) @DataJpaTest public class ArticleRepositoryIntegrationTest {@Autowired private ArticleRepository repository; @Test public void whenFindByPublicationDate_thenArticles1And2Returned () {List result = repository.findAllByPublicationDate (new SimpleDateFormat ("yyyy-MM-dd"). Parse ("2018-01-01")); assertEquals (2, eredmény.méret ()); assertTrue (result.stream () .map (cikk :: getId) .allMatch (id -> Arrays.asList (1, 2) .contains (id))); } @Test public void whenFindByPublicationTimeBetween_thenArticles2And3Returned () {List result = repository.findAllByPublicationTimeBetween (new SimpleDateFormat ("HH: mm"). Parse ("15:15"), new SimpleDateFormat ("HHse: mm". 30 ")); assertEquals (2, eredmény.méret ()); assertTrue (result.stream () .map (cikk :: getId) .allMatch (id -> Arrays.asList (2, 3) .contains (id))); } @Test public void givenArticlesWhenFindWithCreationDateThenArticles2And3Returned () {List result = repository.findAllWithCreationDateTimeBefore (new SimpleDateFormat ("yyyy-MM-dd HH: mm"). Parse ("2017-12-15 10:00"); assertEquals (2, eredmény.méret ()); assertTrue (result.stream () .map (cikk :: getId) .allMatch (id -> Arrays.asList (2, 3) .contains (id));}}
Minden teszt ellenőrzi, hogy csak a feltételeknek megfelelő cikkek kerültek-e letöltésre.
4. Következtetés
Ebben a rövid cikkben azt láthattuk, hogyan lehet lekérdezni az entitásokat a dátum és az idő mezők felhasználásával a Spring Data JPA segítségével.
Megtanultunk egy kis elméletet, mielőtt Spring Data mechanizmusokat használtunk volna az entitások lekérdezéséhez. Láttuk, hogy ezek a mechanizmusok ugyanúgy működnek a dátumokkal és időpontokkal, mint más típusú adatokkal.
A cikk forráskódja elérhető a GitHub oldalon.