DAO s JPA a jar

1. Prehľad

Tento článok ukáže, ako na to implementovať DAO s jarou a JPA. Informácie o základnej konfigurácii JPA nájdete v článku o JPA s pružinou.

2. Už žiadne jarné šablóny

Počnúc jarom 3.1 JpaTemplate a prisl JpaDaoSupportbol zastarané v prospech používania natívneho rozhrania Java Persistence API.

Obe tieto triedy sú takisto relevantné iba pre JPA 1 (z JpaTemplate javadoc):

Upozorňujeme, že táto trieda nebola upgradovaná na JPA 2.0 a nikdy nebude.

V dôsledku toho je teraz najlepšou praxou použite priamo API Java Persistence namiesto JpaTemplate.

2.1. Výnimkový preklad bez šablóny

Jednou z povinností spoločnosti JpaTemplate bol preklad výnimky - preklad nízkoúrovňových výnimiek na vyššiu úroveň, všeobecné jarné výnimky.

Bez šablóny, preklad výnimiek je stále povolený a plne funkčný pre všetky DAO anotované s @Úložisko. Jar to implementuje pomocou fazuľového postprocesora, ktorý poradí všetkým @Úložisko fazuľa so všetkým PersistenceExceptionTranslator sa nachádza v kontajneri.

Je tiež dôležité poznamenať, že mechanizmus prekladu výnimiek používa proxy - aby Spring mohla vytvárať proxy okolo tried DAO, tieto sa nesmú deklarovať konečné.

3. DAO

Najskôr implementujeme základnú vrstvu pre všetky DAO - abstraktnú triedu používajúcu všeobecné a navrhnutú na rozšírenie:

verejná abstraktná trieda AbstractJpaDAO {private Class clazz; @PersistenceContext EntityManager entityManager; public final void setClazz (Class clazzToSet) {this.clazz = clazzToSet; } verejné T findOne (dlhé id) {návrat entityManager.find (clazz, id); } public List findAll () {return entityManager.createQuery ("from" + clazz.getName ()) .getResultList (); } public void create (T entita) {entityManager.persist (entita); } verejná aktualizácia T (entita T) {návrat entityManager.merge (entita); } public void delete (entita T) {entityManager.remove (entita); } public void deleteById (long entityId) {T entity = findOne (entityId); vymazať (entita); }}

Hlavným zaujímavým aspektom je tu cesta the EntityManager sa vstrekuje - pomocou štandardu @PersistenceContext anotácia. Pod kapotou to rieši PersistenceAnnotationBeanPostProcessor - ktorý spracuje anotáciu, načíta správcu entity JPA z obsahuje a vloží ju.

Perzistenčný postprocesor sa vytvára buď explicitne definovaním v konfigurácii, alebo automaticky definovaním kontext: anotácia-konfigurácia alebo kontext: skenovanie komponentov v konfigurácii menného priestoru.

Upozorňujeme tiež, že účtovná jednotka Trieda sa odovzdáva v konštruktore, ktorý sa má použiť v generických operáciách:

@Repository public class FooDAO extends AbstractJPADAO implementuje IFooDAO {public FooDAO () {setClazz (Foo.class); }}

4. Záver

Tento návod je ilustrovaný ako nastaviť vrstvu DAO s Spring a JPApomocou konfigurácie založenej na protokole XML aj Java. Diskutovali sme tiež o tom, prečo nepoužívať JpaTemplate a ako ho nahradiť EntityManager. Konečným výsledkom je ľahká a čistá implementácia DAO, ktorá sa takmer vôbec nespolieha na jar pri kompilácii.

Implementáciu tohto jednoduchého projektu nájdete v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


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