Dotaz na subjekty podľa dátumov a časov pomocou jarných údajov JPA

1. Úvod

V tomto rýchlom návode uvidíme, ako dotazovať entity podľa dátumov pomocou Spring Data JPA.

Najskôr si osviežime pamäť, ako mapovať dátumy a časy pomocou JPA.

Potom vytvoríme entitu s poliami pre dátum a čas a tiež jarné úložisko údajov na dopytovanie týchto entít.

2. Mapovanie dátumov a časov pomocou JPA

Pre začiatočníkov, preskúmame trochu teórie o mapovaní dátumov pomocou JPA. Je potrebné vedieť, že sa musíme rozhodnúť, či chceme zastupovať:

  • Iba rande
  • Iba čas
  • Alebo obaja

Okrem (voliteľné) @ Stĺpec anotáciu, budeme musieť pridať @ Temporal anotácia, aby ste určili, čo toto pole predstavuje.

Táto anotácia má parameter, ktorý má hodnotu Výčet TemporalType:

  • TemporalType.DATE
  • TemporalType.TIME
  • TemporalType.TIMESTAMP

Podrobný článok o mapovaní dátumov a časov pomocou JPA nájdete tu.

3. V praxi

V praxi, akonáhle sú naše subjekty správne nastavené, nie je veľa práce, aby sme ich mohli dopytovať pomocou Spring Data JPA. Musíme len použiť metódy dotazu, @Query anotácia.

Každý mechanizmus jarných údajov JPA bude fungovať dobre.

Pozrime sa na pár príkladov entít dopytovaných podľa dátumov a časov pomocou Spring Data JPA.

3.1. Vytvorte entitu

Pre začiatočníkov povedzme, že máme Článok subjekt s dátumom zverejnenia, časom zverejnenia a dátumom a časom vytvorenia:

@Entity public class Article {@Id @GeneratedValue Integer id; @Temporal (TemporalType.DATE) Dátum zverejneniaDátum; @Temporal (TemporalType.TIME) Dátum zverejneniaČas; @Temporal (TemporalType.TIMESTAMP) Dátum vytvoreniaDateTime; }

Z dôvodu demonštrácie sme dátum a čas publikácie rozdelili do dvoch polí. Takto sú zastúpené tri časové typy.

3.2. Dotaz na subjekty

Teraz, keď je naša entita nastavená, vytvorme jarné dáta Úložisko dopytovať tieto články.

Vytvoríme tri metódy pomocou niekoľkých funkcií Spring Data JPA:

verejné rozhranie ArticleRepository rozširuje JpaRepository {List findAllByPublicationDate (Dátum zverejneniaDátum); Zoznam findAllByPublicationTimeB Between (Dátum zverejneniaTimeStart, Dátum zverejneniaTimeEnd); @Query ("vyberte z článku a, kde a.creationDateTime <=: creationDateTime") List findAllWithCreationDateTimeBefore (@Param ("creationDateTime") Date creationDateTime); }

Definovali sme teda tri metódy:

  • findAllByPublicationDate ktorý načítava články publikované v daný dátum
  • findAllByPublicationTimeB Between ktorý načítava články publikované medzi dvoma danými hodinami
  • a findAllWithCreationDateTimeBefore ktorý načítava články vytvorené pred daným dátumom a časom

Dve prvé metódy sa spoliehajú na Spring Data dotazovacie metódy mechanizmus a posledný dňa @Dopyt anotácia.

To nakoniec nezmení spôsob, akým sa bude s dátumami nakladať. Prvá metóda bude brať do úvahy iba časovú časť parametra.

Druhá bude brať do úvahy iba čas parametrov. A posledný použije dátum aj čas.

3.3. Vyskúšajte dotazy

Posledná vec, ktorú musíme urobiť, je nastaviť niektoré testy na kontrolu, či tieto dotazy fungujú podľa očakávania.

Najskôr importujeme niekoľko údajov do našej databázy a potom vytvoríme testovaciu triedu, ktorá skontroluje každú metódu úložiska:

@RunWith (SpringRunner.class) @DataJpaTest verejná trieda ArticleRepositoryIntegrationTest {@Autowired súkromné ​​úložisko ArticleRepository; @Test public void whenFindByPublicationDate_thenArticles1And2Returned () {List result = repository.findAllByPublicationDate (new SimpleDateFormat ("yyyy-MM-dd"). Parse ("2018-01-01")); assertEquals (2, result.size ()); assertTrue (result.stream () .map (Article :: getId) .allMatch (id -> Arrays.asList (1, 2) .contains (id))); } @Test public void whenFindByPublicationTimeB Between_thenArticles2And3Returned () {List result = repository.findAllByPublicationTimeB Between (new SimpleDateFormat ("HH: mm"). Parse ("15:15"), new SimpleDateFormat ("HH: mm"). 30 ")); assertEquals (2, result.size ()); assertTrue (result.stream () .map (Article :: 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, result.size ()); assertTrue (result.stream () .map (Article :: getId) .allMatch (id -> Arrays.asList (2, 3) .contains (id));}}

Každý test overuje, či sa načítajú iba články zodpovedajúce daným podmienkam.

4. Záver

V tomto krátkom článku sme videli, ako dotazovať entity pomocou polí ich dátumov a časov pomocou Spring Data JPA.

Pred použitím mechanizmov Spring Data na dopytovanie entít sme sa naučili trochu teórie. Videli sme, že tieto mechanizmy fungujú rovnako s dátumami a časmi ako s inými typmi údajov.

Zdrojový kód tohto článku je k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found