Metódy odvodených dotazov v úložiskách JPA údajov z jari

1. Úvod

Pri jednoduchých dotazoch je ľahké odvodiť, aký by mal byť dotaz iba pohľadom na zodpovedajúci názov metódy v našom kóde.

V tomto tutoriále preskúmame, ako Spring Data JPA využíva túto myšlienku vo forme konvencie pomenovania metód.

2. Štruktúra odvodených dotazovacích metód na jar

Odvodené názvy metód majú dve hlavné časti oddelené prvou Autor: kľúčové slovo:

Zoznam findByName (názov reťazca)

Prvá časť - ako Nájsť - je uvádzač a ostatné - ako Podľa názvu - je kritériá.

Podpora jarných údajov JPA nájsť, prečítať, vyhľadať, spočítať a dostať. Mohli sme napríklad urobiť queryByName a Spring Data by sa správali rovnako.

Môžeme tiež použiť Výrazný, prvý, alebo Top odstránenie duplikátov alebo obmedzenie našej sady výsledkov:

Zoznam findTop3ByAge ()

Časť s kritériami obsahuje výrazy podmienky špecifické pre entitu dotazu. Môžeme použiť kľúčové slová podmienky spolu s názvami vlastností entity. Výrazy môžeme spojiť aj pomocou A a Alebo rovnako vidieť za chvíľu.

3. Ukážka aplikácie

Najskôr samozrejme budeme potrebovať aplikáciu pomocou Spring Data JPA.

V tejto aplikácii definujme triedu entity:

@Table (name = "users") @Entity class User {@Id @GeneratedValue private Integer id; súkromné ​​meno reťazca; vek súkromných celých čísel; súkromné ​​ZonedDateTime dátum narodenia; súkromný booleovský aktívny; // štandardné getre a setre}

Definujme tiež úložisko. Predĺži sa JpaRepository, jeden z typov jarných dátových úložísk:

rozhranie UserRepository rozširuje JpaRepository {}

Na toto miesto umiestnime všetky naše odvodené metódy dotazovania.

4. Kľúčové slová s podmienkami rovnosti

Presná rovnosť je jednou z najbežnejšie používaných podmienok v dotazoch. Máme niekoľko možností vyjadrenia = alebo operátory IS v dotaze.

K podmienke presnej zhody môžeme iba pridať názov vlastnosti bez kľúčového slova:

Zoznam findByName (názov reťazca);

A môžeme pridať Je alebo Rovná sa pre čitateľnosť:

Zoznam findByNameIs (názov reťazca); Zoznam findByNameEquals (názov reťazca);

Táto extra čitateľnosť sa hodí, keď potrebujeme namiesto toho vyjadriť nerovnosť:

Zoznam findByNameIsNot (názov reťazca);

Toto je o dosť čitateľnejšie ako findByNameNot (reťazec)!

Ako nulový rovnosť je špeciálny prípad, nemali by sme používať operátor =. Rukoväte Spring Data JPA nulový parametre predvolene. Takže keď minieme a nulový hodnotu podmienky rovnosti, Spring interpretuje dopyt ako IS NULL vo vygenerovanom SQL.

Môžeme tiež použiť IsNull kľúčové slovo na pridanie kritérií IS NULL do dotazu:

Zoznam findByNameIsNull (); Zoznam findByNameIsNotNull ();

Všimnite si, že ani jeden IsNull ani IsNotNull vyžaduje argument metódy.

Existujú aj ďalšie dve kľúčové slová, ktoré nevyžadujú žiadne argumenty. Môžeme použiť Pravdaže a Falošné kľúčové slová na pridanie podmienok rovnosti pre boolovský typy:

Zoznam findByActiveTrue (); Zoznam findByActiveFalse ();

Samozrejme, niekedy chceme niečo miernejšie ako presnú rovnosť, pozrime sa, čo ešte môžeme urobiť.

5. Kľúčové slová s podmienkou podobnosti

Ak potrebujeme na výsledky dotazu použiť vzorec vlastnosti, máme niekoľko možností.

Môžeme nájsť mená, ktoré začínajú hodnotou pomocou Počnúc:

Zoznam findByNameStartingWith (predpona reťazca);

Zhruba to znamená „KDE názov PÁČI SA MI TO „Hodnota%““.

Ak chceme mená, ktoré sa končia hodnotou, potom Končiaci s je to, čo chceme:

Zoznam findByNameEndingWith (reťazcová prípona);

Alebo môžeme zistiť, s ktorými menami je hodnota Obsahujúce:

Zoznam findByNameContaining (reťazec infix);

Upozorňujeme, že všetky vyššie uvedené podmienky sa nazývajú preddefinované výrazy vzorov. Takže nemusíme dodávať % operátor vo vnútri argumentu keď sa tieto metódy volajú.

Predpokladajme však, že robíme niečo zložitejšie. Povedzme, že musíme načítať používateľov, ktorých mená začínajú na a, obsahujú b, a končiť s c.

Preto môžeme pridať vlastné LIKE pomocou Páči sa mi to kľúčové slovo:

Zoznam findByNameLike (reťazec likePattern);

A potom môžeme odovzdať náš LIKE vzor, ​​keď zavoláme metódu:

Reťazec likePattern = "a% b% c"; userRepository.findByNameLike (likePattern);

To je zatiaľ dosť o menách. Vyskúšajme ďalšie hodnoty v Používateľ.

6. Kľúčové slová podmienky porovnania

Ďalej môžeme použiť Menej ako a LessThanEqual kľúčové slová na porovnanie záznamov s danou hodnotou pomocou < a <= operátori:

Zoznam findByAgeLessThan (celé číslo); Zoznam findByAgeLessThanEqual (celé číslo);

Na druhej strane, v opačnej situácii môžeme použiť Väčší než a GreaterThanEqual Kľúčové slová:

Zoznam findByAgeGreaterThan (celé číslo); Zoznam findByAgeGreaterThanEqual (celé číslo);

Alebo nájdeme používateľov, ktorí majú vekovú skupinu od dvoch rokov Medzi:

Zoznam findByAgeB Between (Integer startAge, Integer endAge);

Môžeme tiež dodať kolekciu vekových skupín, ktoré zodpovedajú použitiu V:

Zoznam findByAgeIn (vek zbierky);

Pretože poznáme dátumy narodenia používateľov, možno by sme mali vyhľadať používateľov, ktorí sa narodili pred alebo po danom dátume. Použili by sme Predtým a Po pre to:

Zoznam findByBirthDateAfter (ZonedDateTime birthDate); Zoznam findByBirthDateBefore (ZonedDateTime birthDate);

7. Viaceré podmienkové výrazy

Pomocou výrazu môžeme kombinovať toľko výrazov, koľko potrebujeme A a Alebo Kľúčové slová:

Zoznam findByNameOrBirthDate (názov reťazca, ZonedDateTime dátum narodenia); Zoznam findByNameOrBirthDateAndActive (názov reťazca, ZonedDateTime birthDate, Boolean aktívny);

Poradie prednosti je A potom Alebo presne ako Java.

Aj keď Spring Data JPA neobmedzuje počet výrazov, ktoré môžeme pridať, nemali by sme sa tu zblázniť. Dlhé mená sú nečitateľné a ťažko sa udržiavajú. V prípade zložitých otázok sa pozrite na the @Dopyt namiesto toho anotácia.

8. Zoradenie výsledkov

Ďalej nasleduje triedenie. Mohli by sme požiadať, aby boli používatelia abecedne zoradení podľa mena pomocou Zoradiť podľa:

Zoznam findByNameOrderByName (názov reťazca); Zoznam findByNameOrderByNameAsc (názov reťazca);

Vzostupné poradie je predvolená možnosť triedenia, ale môžeme ju použiť Popis namiesto toho, aby ste ich zoradili opačne:

Zoznam findByNameOrderByNameDesc (názov reťazca);

9. findOne vs findById v Úložisko Crud

Jarný tím vykonal v roku 2006 niekoľko zásadných zmien Úložisko Crud s Spring Boot 2.x. Jedným z nich je premenovanie findOne do findById.

Predtým sme volali Spring Boot 1.x. findOne keď sme chceli načítať entitu pomocou jej primárneho kľúča:

User user = userRepository.findOne (1);

Od Spring Boot 2.x môžeme robiť to isté s findById:

User user = userRepository.findById (1);

Všimnite si, že findById () metóda je už definovaná v Úložisko Crud pre nás. Takže to nemusíme výslovne definovať vo vlastných rozšíreniach, ktoré sa rozširujú Úložisko Crud.

10. Záver

V tomto článku sme vysvetlili mechanizmus odvodenia dotazu v Spring Data JPA. Na napísanie odvodených metód dotazovania do archívov JPA Spring Data sme použili kľúčové slová podmienky vlastnosti.

Zdrojový kód tohto tutoriálu je k dispozícii v projekte Github.


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