Úvod do Spring Data JPA

1. Prehľad

Tento článok sa zameria na zavedenie Spring Data JPA do jarného projektu a úplná konfigurácia vrstvy perzistencie. Podrobný úvod o nastavení jarného kontextu pomocou konfigurácie založenej na prostredí Java a základnej pomôcky Maven pre projekt nájdete v tomto článku.

2. Jarné dáta generované DAO - už žiadne implementácie DAO

Ako sme už diskutovali v predchádzajúcom článku, vrstva DAO sa zvyčajne skladá z veľkého množstva štandardných kódov, ktoré sa môžu a mali by sa zjednodušiť. Výhody takéhoto zjednodušenia sú veľa: zníženie počtu artefaktov, ktoré musíme definovať a udržiavať, konzistencia vzorov prístupu k dátam a konzistencia konfigurácie.

Spring Data posúva toto zjednodušenie o krok vpred a umožňuje úplne odstrániť implementácie DAO. Rozhranie DAO je teraz jediný artefakt, ktorý musíme výslovne definovať.

Aby bolo možné začať využívať programovací model Spring Data s JPA, musí rozhranie DAO rozšíriť špecifické JPA Úložisko rozhranie - JpaRepository. Toto umožní spoločnosti Spring Data nájsť toto rozhranie a automaticky preň vytvoriť implementáciu.

Rozšírením rozhrania získame najrelevantnejšie metódy CRUD pre štandardný prístup k dátam dostupné v štandardnom DAO.

3. Vlastná metóda prístupu a dotazy

Ako už bolo uvedené, implementáciou jedného z Úložisko rozhrania, DAO už bude mať definované a implementované niektoré základné CRUD metódy (a dotazy).

Na definovanie konkrétnejších prístupových metód podporuje Spring JPA niekoľko možností:

  • jednoducho definovať novú metódu v rozhraní
  • uveďte skutočné JPQL dopyt pomocou @Dopyt anotácia
  • používať pokročilejšie Špecifikácia a podpora Querydsl v jarných dátach
  • definovať vlastné dotazy prostredníctvom JPA Named Queries

Tretia možnosť - podpora špecifikácií a dotazov - je podobná kritériám JPA, ale používa pružnejšie a pohodlnejšie API. Vďaka tomu je celá operácia oveľa čitateľnejšia a znovu použiteľná. Výhody tohto API sa stanú výraznejšími pri riešení veľkého počtu pevných dotazov, pretože by sme ich potenciálne mohli stručnejšie vyjadriť prostredníctvom menšieho počtu opakovane použiteľných blokov.

Táto posledná možnosť má tú nevýhodu, že zahŕňa buď XML, alebo zaťažuje triedu domény dotazmi.

3.1. Automatické vlastné dotazy

Keď Spring Data vytvorí nový Úložisko implementácii analyzuje všetky metódy definované rozhraniami a pokúša sa o ne automaticky generovať dotazy z názvov metód. Aj keď to má určité obmedzenia, je to veľmi efektívny a elegantný spôsob definovania nových vlastných prístupových metód s veľmi malým úsilím.

Pozrime sa na príklad: ak má entita a názov pole (a štandard Java Bean getName a setName metódy), definujeme findByName metóda v rozhraní DAO; automaticky vygeneruje správny dopyt:

verejné rozhranie IFooDAO rozširuje JpaRepository {Foo findByName (názov reťazca); }

Toto je pomerne jednoduchý príklad. Mechanizmus vytvárania dotazov podporuje oveľa väčšiu skupinu kľúčových slov.

V prípade, že syntaktický analyzátor nemôže priradiť vlastnosť k poľu objektu domény, zobrazí sa nasledujúca výnimka:

java.lang.IllegalArgumentException: pre typovú triedu com.baeldung.spring.data.persistence.model.Foo sa nenašla žiadna vlastnosť nam

3.2. Ručné vlastné dotazy

Pozrime sa teraz na vlastný dopyt, ktorý definujeme prostredníctvom @Dopyt anotácia:

@Query ("VYBERTE F Z Foo f WHERE LOWER (f.name) = LOWER (: name)") Foo retrieveByName (@Param ("name") Názov reťazca);

Pre ešte jemnejšiu kontrolu nad vytváraním dotazov, ako napríklad pomocou pomenovaných parametrov alebo úpravou existujúcich dotazov, je referencia dobrým začiatkom.

4. Konfigurácia transakcie

Skutočná implementácia jarne spravovaného DAO je skutočne skrytá, pretože s ním priamo nepracujeme. Toto je však dosť jednoduchá implementácia - the SimpleJpaRepository - ktorá definuje sémantiku transakcií pomocou anotácií.

Presnejšie povedané, toto používa iba na čítanie @ Transakčné anotácia na úrovni triedy, ktorá je potom prepísaná pre metódy, ktoré nie sú iba na čítanie. Zvyšok sémantiky transakcií je predvolený, ale tieto je možné ľahko prepísať manuálne pre každú metódu.

4.1. Preklady výnimiek sú živé a sú v poriadku

Otázka je teraz - keďže Spring Data JPA nezávisí od starých šablón ORM (JpaTemplate, HibernateTemplate) a boli odstránené od jari 5 - chystáme sa ešte nechať preložiť naše výnimky Spoločného parlamentného zhromaždenia do jari DataAccessException hierarchia?

Samozrejme, že sme - preklad výnimiek je stále povolený používaním @Úložisko anotácia k DAO. Táto anotácia umožňuje postprocesoru jarných bôbov poradiť všetkým @Úložisko fazuľa so všetkým PersistenceExceptionTranslator inštancie nájdené v kontajneri a poskytujú preklad výnimiek rovnako ako predtým.

Poďme overiť preklad výnimiek pomocou integračného testu:

@Test (očakáva sa = DataIntegrityViolationException.class) public void givenFooHasNoName_whenInvalidEntityIsCreated_thenDataException () {service.create (new Foo ()); }

Pamätajte na to preklad výnimiek sa vykonáva prostredníctvom serverov proxy. Aby Spring mohla vytvárať proxy okolo tried DAO, tieto sa nesmú deklarovať konečné.

5. Konfigurácia úložiska JPA na jar

Na aktiváciu podpory jarného úložiska JPA môžeme použiť @EnableJpaRepositories anotáciu a zadajte balík, ktorý obsahuje rozhrania DAO:

@EnableJpaRepositories (basePackages = "com.baeldung.spring.data.persistence.repository") verejná trieda PersistenceConfig {...}

To isté môžeme urobiť s konfiguráciou XML:

6. Konfigurácia Java alebo XML

Ako nakonfigurovať JPA na jar, sme si už veľmi podrobne hovorili v predchádzajúcom článku. Spoločnosť Spring Data tiež využíva jarnú podporu pre JPA @PersistenceContext anotácia. Týmto sa používa na drôtovanie EntityManager do jarnej časti továrne zodpovednej za vytvorenie skutočných implementácií DAO - JpaRepositoryFactoryBean.

Okrem už diskutovanej konfigurácie musíme zahrnúť aj Spring Data XML Config - ak používame XML:

@Configuration @EnableTransactionManagement @ImportResource ("classpath *: * springDataConfig.xml") verejná trieda PersistenceJPAConfig {...}

7. Maven závislosť

Okrem konfigurácie Maven pre JPA, ako v predchádzajúcom článku, pridáme spring-data-jpa závislosť:

 org.springframework.data spring-data-jpa 2.2.7.RELEASE 

8. Používanie Spring Boot

Môžeme tiež použiť závislosť Spring Boot Starter Data JPA, ktorá automaticky nakonfiguruje Dátový zdroj pre nás.

Musíme sa tiež ubezpečiť, že databáza, ktorú chceme použiť, sa nachádza v ceste triedy. V našom príklade sme pridali databázu H2 v pamäti:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.6.RELEASE com.h2database h2 1.4.200 

Výsledkom je, že iba vykonaním týchto závislostí je naša aplikácia funkčná a môžeme ju použiť na ďalšie operácie s databázami.

Explicitná konfigurácia pre štandardnú aplikáciu Spring je teraz zahrnutá ako súčasť automatickej konfigurácie Spring Boot.

Automatickú konfiguráciu môžeme samozrejme upraviť pridaním našej prispôsobenej explicitnej konfigurácie.

Spring Boot poskytuje jednoduchý spôsob, ako to dosiahnuť pomocou vlastností v application.properties spis:

spring.datasource.url = jdbc: h2: mem: db; DB_CLOSE_DELAY = -1 spring.datasource.username = sa spring.datasource.password = sa

V tomto príklade sme zmenili adresu URL a poverenia pripojenia.

9. Záver

Tento článok sa venoval konfigurácii a implementácii vrstvy perzistencie pomocou Spring 5, JPA 2 a Spring Data JPA (súčasť zastrešujúceho projektu Spring Data), pričom sa využívali konfigurácie založené na XML a Java.

Diskutovali sme o spôsoboch, ako definovať viac pokročilé vlastné dotazy, ako aj transakčná sémantikaa konfigurácia s novým jpa menný priestor. Konečným výsledkom je nový a elegantný prístup k dátam s programom Spring, ktorý nevyžaduje takmer žiadnu implementáciu.

Implementáciu tohto Sprievodcu jarnými údajmi JPA nájdete v projekte GitHub.


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