Bevezetés a Spring Data JPA-ba

1. Áttekintés

Ez a cikk a következőkre fog összpontosítani a Spring Data JPA bevezetése egy tavaszi projektbe és a perzisztencia réteg teljes konfigurálása. A Spring kontextus Java-alapú konfigurációval és az alap Maven pom használatával történő lépésről lépésre történő bemutatásához olvassa el ezt a cikket.

2. A tavaszi adatok által generált DAO - Nincs több DAO-implementáció

Amint arról egy korábbi cikkünkben kitértünk, a DAO réteg általában sok kazánlap kódból áll, amelyeket le lehet és kell egyszerűsíteni. Az ilyen egyszerűsítésnek számos előnye van: a meghatározandó és fenntartandó műtermékek számának csökkenése, az adatelérési minták és a konfiguráció következetessége.

A Spring Data ezt az egyszerűsítést egy lépéssel előrelépi és lehetővé teszi a DAO megvalósítások teljes eltávolítását. A DAO kezelőfelülete most az egyetlen műtárgy, amelyet kifejezetten meg kell határoznunk.

A Spring Data programozási modell JPA-val történő kiaknázásának megkezdéséhez egy DAO interfésznek ki kell terjesztenie a JPA-specifikusat Adattár interfész - JpaRepository. Ez lehetővé teszi a Spring Data számára, hogy megtalálja ezt a felületet, és automatikusan létrehozza annak megvalósítását.

Az interfész kibővítésével megkapjuk a szabványos adatelérés szempontjából a legrelevánsabb CRUD módszereket, amelyek egy standard DAO-ban állnak rendelkezésre.

3. Egyéni hozzáférési módszer és lekérdezések

Ahogy megbeszéltük, az egyik Adattár interfészeket, a DAO-nak már meg lesz határozva és megvalósítva néhány alapvető CRUD módszer (és lekérdezés).

A konkrétabb hozzáférési módszerek meghatározásához a Tavaszi Közgyűlés jó néhány lehetőséget támogat:

  • egyszerűen meghatározzon egy új módszert a felületen
  • adja meg a tényleges JPQL lekérdezés a @Lekérdezés annotáció
  • használja a fejlettebbeket Specifikáció és Querydsl támogatás a Spring Data-ban
  • meghatározza egyedi lekérdezések a JPA elnevezett lekérdezéseken keresztül

A harmadik lehetőség - a Specifikációk és a Querydsl támogatás - hasonló a JPA Criteria-hoz, de rugalmasabb és kényelmesebb API-t használ. Ez az egész műveletet sokkal olvashatóbbá és újrafelhasználhatóbbá teszi. Ennek az API-nak az előnyei hangsúlyosabbá válnak, ha nagy számú rögzített lekérdezést kezelünk, mivel ezeket rövidebben kifejezhetnénk kisebb számú újrafelhasználható blokkon keresztül.

Ennek az utolsó lehetőségnek az a hátránya, hogy vagy XML-t tartalmaz, vagy a tartomány osztályt terheli a lekérdezésekkel.

3.1. Automatikus egyéni lekérdezések

Amikor a Spring Data létrehoz egy újat Adattár megvalósításakor elemzi az interfészek által definiált összes módszert és megpróbálja automatikusan generál lekérdezéseket a metódus nevekből. Bár ennek vannak bizonyos korlátai, nagyon hatékony és elegáns módszer az új egyedi hozzáférési módszerek meghatározására, nagyon kevés erőfeszítéssel.

Nézzünk meg egy példát: ha az entitásnak van egy név mező (és a Java Bean szabvány getName és setName mód), meghatározzuk a findByName módszer a DAO felületen; ez automatikusan létrehozza a helyes lekérdezést:

nyilvános felület Az IFooDAO kiterjeszti a JpaRepository {Foo findByName (karakterlánc neve); }

Ez egy viszonylag egyszerű példa. A lekérdezés-létrehozási mechanizmus sokkal nagyobb kulcsszókészletet támogat.

Abban az esetben, ha az elemző nem tudja egyeztetni a tulajdonságot a tartományobjektum mezővel, a következő kivételt látjuk:

java.lang.IllegalArgumentException: Nem található tulajdonságnév a com.baeldung.spring.data.persistence.model.Foo osztályhoz.

3.2. Manuális egyéni lekérdezések

Most nézzünk meg egy egyéni lekérdezést, amelyet a @Lekérdezés kommentár:

@Query ("KIVÁLASZTÁS FOO-BÓL F WHERE LOWER (f.név) = LOWER (: név)") Foo retrieveByName (@Param ("név") String név);

A lekérdezések létrehozásának még finomabb ellenőrzéséhez, például megnevezett paraméterek használatához vagy a meglévő lekérdezések módosításához a hivatkozás jó kezdő.

4. Tranzakció konfigurálása

A tavasszal kezelt DAO tényleges megvalósítása valóban rejtve van, mivel nem közvetlenül dolgozunk vele. Ez azonban elég egyszerű megvalósítás - a SimpleJpaRepository - amely annotációk segítségével határozza meg a tranzakciós szemantikát.

Pontosabban: ez csak olvashatót használ @ Tranzakció osztályszintű kommentár, amelyet a nem csak olvasható módszerek felülírnak. A tranzakciós szemantika többi része alapértelmezett, de ezeket manuálisan felül lehet írni módszerenként.

4.1. Kivételes fordítás él és jól működik

A kérdés most - mivel a Spring Data JPA nem függ a régi ORM sablonoktól (JpaTemplate, HibernateTemplate), és az 5. tavasz óta eltávolításra kerültek - a közös parlamenti közgyűlés kivételeit még mindig lefordítjuk a tavaszi fordulóra DataAccessException hierarchia?

Természetesen, mi vagyunk - kivétel fordítását továbbra is engedélyezi a @Raktár annotáció a DAO-n. Ez a megjegyzés lehetővé teszi a tavaszi bab utófeldolgozójának, hogy mindenkinek tanácsot adjon @Raktár bab az összes PersistenceExceptionTranslator a tárolóban található példányok, és kivételes fordítást nyújtanak, csakúgy, mint korábban.

Ellenőrizzük a kivétel fordítását egy integrációs teszttel:

@Test (várható = DataIntegrityViolationException.class) public void givenFooHasNoName_whenInvalidEntityIsCreated_thenDataException () {service.create (new Foo ()); }

Tartsd észben, hogy a kivétel fordítása proxykon keresztül történik. Annak érdekében, hogy Spring képes legyen meghatalmazottakat létrehozni a DAO osztályok körül, ezeket nem szabad deklarálni végső.

5. Tavaszi adatok JPA-adattár konfigurálása

A tavaszi JPA adattár támogatásának aktiválásához használhatjuk a @EnableJpaRepositories jelölést és adja meg a DAO interfészeket tartalmazó csomagot:

@EnableJpaRepositories (basePackages = "com.baeldung.spring.data.persistence.repository") public class PersistenceConfig {...}

Ugyanezt megtehetjük egy XML konfigurációval is:

6. Java vagy XML konfiguráció

Korábbi cikkünkben már nagyon részletesen megvitattuk a JPA konfigurálását tavasszal. A Spring Data kihasználja Spring közös támogatásának támogatását is @PersistenceContext annotáció. Ezt használja a vezeték bekötésére EntityManager a DAO tényleges megvalósításainak létrehozásáért felelős tavaszi gyárba - JpaRepositoryFactoryBean.

A már tárgyalt konfiguráció mellett be kell vonnunk a Spring Data XML Config-et is - ha XML-t használunk:

@Configuration @EnableTransactionManagement @ImportResource ("classpath *: * springDataConfig.xml") public class PersistenceJPAConfig {...}

7. Maven-függőség

A JPA Maven konfigurációján kívül, hasonlóan egy előző cikkhez, hozzáadjuk a spring-data-jpa függőség:

 org.springframework.data spring-data-jpa 2.2.7.KÖZLEMÉNY 

8. A Spring Boot használata

Használhatjuk a Spring Boot Starter Data JPA függőséget is, amely automatikusan konfigurálja a Adatforrás nekünk.

Biztosítanunk kell azt is, hogy a használni kívánt adatbázis jelen van-e az osztályútvonalon. Példánkban felvettük a H2 memóriában lévő adatbázist:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.6. KÖZLEMÉNY com.h2database h2 1.4.200 

Ennek eredményeként csak ezen függőségek elvégzésével az alkalmazásunk működik és működik, és más adatbázis-műveletekhez felhasználhatjuk.

A standard Spring alkalmazás kifejezett konfigurációja mostantól a Spring Boot automatikus konfigurálás részeként szerepel.

Természetesen módosíthatjuk az automatikus konfigurációt a testreszabott explicit konfiguráció hozzáadásával.

A Spring Boot egyszerű módot kínál erre a alkalmazás.tulajdonságok fájl:

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

Ebben a példában megváltoztattuk a kapcsolat URL-jét és hitelesítő adatait.

9. Következtetés

Ez a cikk a perzisztencia réteg konfigurálásáról és megvalósításáról volt szó az Spring 5, a JPA 2 és a Spring Data JPA (a Spring Data esernyő projekt része) XML és Java alapú konfigurációjával.

Megbeszéltük a további meghatározás módjait speciális egyéni lekérdezések, továbbá tranzakciós szemantika, és a konfiguráció az újval jpa névtér. A végeredmény az adatelérés új és elegáns felvétele a Spring segítségével, szinte semmilyen tényleges megvalósítási munka nélkül.

A Spring Data JPA oktatóanyag megvalósítása megtalálható a GitHub projektben.