Izvedene metode upita u spremištima proljetnih podataka JPA

1. Uvod

Za jednostavne upite lako je izvesti kakav bi upit trebao biti samo gledanjem odgovarajućeg naziva metode u našem kodu.

U ovom ćemo uputstvu istražiti kako Spring Data JPA koristi ovu ideju u obliku konvencije o imenovanju metoda.

2. Struktura izvedenih metoda upita u proljeće

Izvedena imena metoda imaju dva glavna dijela odvojena prvim Po ključna riječ:

Popis findByName (naziv niza)

Prvi dio - poput pronaći - je uvoditelj a ostalo - poput Imenom - je kriteriji.

Podržava Spring Data JPA pronađi, pročitaj, postavi upit, broji i dobiti. Tako smo, na primjer, mogli i učiniti queryByName i Spring Data ponašali bi se isto.

Možemo i koristiti Izrazito, prvo, ili Vrh da uklonimo duplikate ili ograničimo naš skup rezultata:

Popis findTop3ByAge ()

Dio kriterija sadrži izraze uvjeta specifične za entitet upita. Ključne riječi stanja možemo koristiti zajedno s imenima entiteta entiteta. Izraze također možemo povezati s I i Ili, kao što vidite za samo trenutak.

3. Primjer uzorka

Prvo, naravno, trebat će nam aplikacija koja koristi Spring Data JPA.

U toj aplikaciji definirajmo klasu entiteta:

@Tabela (name = "users") @Entity class Korisnik {@Id @GeneratedValue private Integer id; privatni naziv niza; privatno Integer doba; privatni ZonedDateTime datum rođenja; private Boolean aktivan; // standardni geteri i postavljači}

I, definirajmo i spremište. Produžit će se JpaRepository, jedna od vrsta spremišta podataka Spring:

sučelje UserRepository proširuje JpaRepository {}

Ovdje ćemo smjestiti sve izvedene metode upita.

4. Ključne riječi ravnopravnosti

Točna jednakost jedan je od najčešće korištenih uvjeta u upitima. Imamo nekoliko mogućnosti za izražavanje = ili IS operatori u upitu.

Možemo jednostavno dodati ime svojstva bez ključne riječi za točno podudaranje:

Popis findByName (naziv niza);

I možemo dodati Je ili Jednako za čitljivost:

Popis findByNameIs (naziv niza); Popis findByNameEquals (naziv niza);

Ova dodatna čitljivost dobro dođe kada umjesto toga moramo izraziti nejednakost:

Popis findByNameIsNot (naziv niza);

Ovo je prilično čitljivo od findByNameNot (String)!

Kao null jednakost je poseban slučaj, ne bismo trebali koristiti operator =. Spring Data JPA ručke null parametri prema zadanim postavkama. Dakle, kad prođemo a null vrijednost za uvjet jednakosti, Spring interpretira upit kao IS NULL u generiranom SQL-u.

Također možemo koristiti IsNull ključna riječ za dodavanje IS NULL kriterija u upit:

Popis findByNameIsNull (); Popis findByNameIsNotNull ();

Imajte na umu ni to IsNull ni IsNotNull zahtijeva argument metode.

Postoje i još dvije ključne riječi koje ne zahtijevaju nikakve argumente. Možemo koristiti Pravi i Lažno ključne riječi za dodavanje uvjeta jednakosti boolean vrste:

Popis findByActiveTrue (); Popis findByActiveFalse ();

Naravno, ponekad želimo nešto blaže od točne jednakosti, da vidimo što još možemo učiniti.

5. Ključne riječi stanja sličnosti

Kad trebamo ispitati rezultate s uzorkom svojstva, imamo nekoliko mogućnosti.

Imena koja počinju s vrijednošću možemo pronaći pomoću Počevši sa:

Popis findByNameStartingWith (prefiks niza);

Otprilike, ovo znači „GDJE Ime KAO 'vrijednost%'“.

Ako želimo imena koja završavaju vrijednošću, tada EndingWith je ono što želimo:

Popis findByNameEndingWith (sufiks niza);

Ili možemo pronaći uz koja imena sadrži vrijednost Sadrži:

Popis findByNameContaining (string infix);

Imajte na umu da se svi gornji uvjeti nazivaju unaprijed definiranim izrazima uzorka. Tako, ne trebamo dodavati % operator unutar argumenta kad se te metode pozovu.

Ali, pretpostavimo da radimo nešto složenije. Recimo da moramo dohvatiti korisnike čija imena počinju s a, sadrže b, i završi s c.

Za to možemo dodati vlastiti LIKE s Kao ključna riječ:

Popis findByNameLike (niz poputPattern);

A tada možemo predati svoj LIKE obrazac kada pozovemo metodu:

Niz poputPattern = "a% b% c"; userRepository.findByNameLike (poputPattern);

Za sada je dosta o imenima. Isprobajmo neke druge vrijednosti u Korisnik.

6. Ključne riječi stanja usporedbe

Nadalje, možemo koristiti Manje od i LessThanEqual ključne riječi za usporedbu zapisa sa zadanom vrijednošću pomoću < i <= operateri:

Popis findByAgeLessThan (cijela dob); Popis findByAgeLessThanEqual (Integer age);

S druge strane, u suprotnoj situaciji možemo koristiti Više nego i Veća od jednake ključne riječi:

Popis findByAgeGreaterThan (cijela dob); Popis findByAgeGreaterThanEqual (cijela dob);

Ili možemo pronaći korisnike koji imaju između dvije dobi Između:

Popis findByAgeBetween (Integer startAge, Integer endAge);

Također možemo dostaviti zbirku dobnih skupina koje se podudaraju s upotrebom U:

Popis findByAgeIn (Zbirka dob);

Budući da znamo rođendan korisnika, možda bismo željeli postaviti upit za korisnike koji su rođeni prije ili nakon određenog datuma. Koristili bismo Prije i Nakon za to:

Popis findByBirthDateAfter (ZonedDateTime birthDate); Popis findByBirthDateBefore (ZonedDateTime datum rođenja);

7. Višestruki izrazi uvjeta

Upotrebom možemo kombinirati onoliko izraza koliko nam je potrebno I i Ili ključne riječi:

Popis findByNameOrBirthDate (ime niza, ZonedDateTime datum rođenja); Popis findByNameOrBirthDateAndActive (Ime niza, ZonedDateTime datum rođenja, logička vrijednost aktivna);

Redoslijed prvenstva je I zatim Ili, baš kao i Java.

Iako Spring Data JPA ne nameće ograničenje koliko izraza možemo dodati, ovdje ne bismo smjeli poludjeti. Duga imena nisu čitljiva i teško ih je održati. Za složene upite pogledajte the @Query umjesto toga bilješka.

8. Sortiranje rezultata

Sljedeće je sortiranje. Mogli bismo tražiti da se korisnici poredaju po abecedi prema imenu Naruči:

Popis findByNameOrderByName (naziv niza); Popis findByNameOrderByNameAsc (naziv niza);

Uzlazni poredak zadana je opcija sortiranja, ali možemo koristiti Desc umjesto da ih sortirate obrnuto:

Popis findByNameOrderByNameDesc (naziv niza);

9. findOne nasuprot findById u CrudRepository

Proljetni tim napravio je neke velike promjene u CrudRepository s Spring Boot 2.x. Jedan od njih je preimenovanje findOne do findById.

Prije bismo nazvali Spring Boot 1.x findOne kada smo željeli dohvatiti entitet prema njegovom primarnom ključu:

Korisnik user = userRepository.findOne (1);

Od Spring Boot 2.x-a možemo učiniti isto s findById:

Korisnik user = userRepository.findById (1);

Imajte na umu da findById () metoda je već definirana u CrudRepository za nas. Stoga ga ne moramo eksplicitno definirati u prilagođenim spremištima koja se proširuju CrudRepository.

10. Zaključak

U ovom smo članku objasnili mehanizam izvođenja upita u Spring Data JPA. Koristili smo ključne riječi stanja svojstva za pisanje izvedenih metoda upita u spremišta Spring Data JPA.

Izvorni kod ovog vodiča dostupan je na projektu Github.


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