A DAO a JPA-val és tavasszal

1. Áttekintés

Ez a cikk megmutatja, hogyan kell hajtsa végre a DAO-t Spring és JPA-val. Az alapvető JPA-konfigurációról lásd a JPA with Spring című cikket.

2. Nincs több tavaszi sablon

A 3.1 tavasztól kezdve a JpaTemplate és a megfelelő JpaDaoSupportvolt elavult a natív Java Persistence API használata mellett.

Ezenkívül mindkét osztály csak a JPA 1 szempontjából releváns (a JpaTemplate javadoc):

Ne feledje, hogy ez az osztály nem lett frissítve JPA 2.0-ra, és soha nem fog.

Ennek következtében ma már a legjobb gyakorlat közvetlenül használja a Java Persistence API-t a helyett JpaTemplate.

2.1. Kivételfordítás a sablon nélkül

Az egyik feladata JpaTemplate volt kivétel fordítás - az alacsony szintű kivételek lefordítása a magasabb szintű, általános tavaszi kivételekké.

Sablon nélkül, a kivételes fordítás továbbra is engedélyezett és teljesen működőképes az összes DAO-val @Raktár. Spring ezt egy bab utófeldolgozóval valósítja meg, amely mindenkinek tanácsot ad @Raktár bab az összes PersistenceExceptionTranslator megtalálható a Konténerben.

Fontos megjegyezni azt is a kivételes fordítási mechanizmus proxykat használ - Ahhoz, hogy Spring képes legyen meghatalmazottakat létrehozni a DAO osztályok körül, ezeket nem szabad deklarálni végső.

3. A DAO

Először megvalósítjuk az összes DAO alaprétegét - egy absztrakt osztályt, amely generikusakat használ és kibővítésre készült:

public abstract class AbstractJpaDAO {private Class clazz; @PersistenceContext EntityManager entitásManager; public final void setClazz (Class clazzToSet) {this.clazz = clazzToSet; } public T findOne (hosszú id) {return entitásManager.find (clazz, id); } public list findAll () {return entitásManager.createQuery ("from" + clazz.getName ()) .getResultList (); } public void create (T entitás) {entityManager.persist (entitás); } public T update (T entitás) {return entitásManager.merge (entitás); } public void delete (T entitás) {entityManager.remove (entitás); } public void deleteById (hosszú entitásId) {T entitás = findOne (entitásId); törlés (entitás); }}

A fő érdekes szempont itt az út a EntityManager beadják - a szabvány használatával @PersistenceContext annotáció. A motorháztető alatt ezt a PersistenceAnnotationBeanPostProcessor - amely feldolgozza az annotációt, lekéri a JPA entitáskezelőt a tartalomból és beadja.

A perzisztens utólagos processzort vagy kifejezetten úgy hozzák létre, hogy definiálja azt a konfigurációban, vagy automatikusan, definiálva kontextus: annotation-config vagy kontextus: komponens-szkennelés a névtér-konfigurációban.

Vegye figyelembe azt is, hogy az entitás Osztály átadódik a konstruktorban az általános műveletekhez:

@Repository public class A FooDAO kiterjeszti az AbstractJPADAO megvalósítja az IFooDAO {public FooDAO () {setClazz (Foo.class); }}

4. Következtetés

Ez az oktatóanyag szemlélteti hogyan állítsunk fel DAO réteget Spring és JPA segítségével, mind XML, mind Java alapú konfigurációt használva. Megbeszéltük azt is, hogy miért ne használnánk a JpaTemplate és hogyan lehet lecserélni a EntityManager. A végeredmény egy könnyű, tiszta DAO megvalósítás, a fordítás idején szinte nincs szükség a Springre.

Ennek az egyszerű projektnek a megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.