it-swarm.com.de

Spring Data JDBC/Spring Data JPA gegen den Ruhezustand

Was sind die typischen Szenarien, in denen Spring Data JDBC/Spring Data JPA vs. Ich möchte die Szenarien verstehen, in denen eine dieser Implementierungen am besten geeignet ist.

8
Punter Vicky

Wie @Naros sagte, funktioniert die Frage, wie sie sich aktuell im Titel befindet, nicht wirklich. Anscheinend sollten wir uns 4 Optionen ansehen und meistens die Profis jedes Ansatzes auflisten. Die Nachteile sind das Fehlen der Profis des anderen:

JDBC ohne Federdaten

Sie erhalten eine 100% genaue Kontrolle über das, was passiert. Nichts wird von einem Framework erzeugt oder injiziert. Das hört sich vielleicht nach einem Betrüger an, aber wenn Sie versucht haben, Zuordnungen und Konfigurationen zu optimieren, um eine JPA-Implementierung zu erhalten, die das tut, was Sie in Java und SQL trivial schreiben könnten, werden Sie verstehen, dass dies ein großer Profi sein kann.

Sie müssen weder JPA noch Spring Data lernen. Ich persönlich denke, Spring Data ist einfach, aber ich bin voreingenommen (siehe mein Profil). JPA ist jedoch mit Sicherheit eine Herausforderung, wenn Sie den Bereich der unbedeutenden Entitäten und des Setups verlassen. 

  • keine Anforderungen, wie Sie Ihr Domänenmodell modellieren (JPA erfordert beispielsweise Standardkonstruktoren)

Sie möchten wahrscheinlich eine Bibliothek verwenden, um den Boilerplate-Code zu reduzieren. Schauen Sie sich an:

  • JOOQ

  • MyBatis

  • Spring JdbcTemplate (verwendbar ohne den Rest des Frühlings)

  • QueryDsl

JDBC mit Spring Data

Sie erhalten die Vorteile von Spring Data in Kombination mit denen von JDBC (siehe oben):

  • Repositories mit CRUD-Methoden aus der Box. 

  • Gute Integration in die Spring-Infrastruktur, für Transaktionsabwicklung, Abhängigkeitseingabe, Fehlerübersetzung, Paging ...

  • Es ist immer noch ein wirklich einfaches Programmiermodell. SQL-Anweisungen kommen genau dann vor, wenn man von ihnen erwarten würde, und wenn Sie möchten, können Sie mit oder ohne die Unterstützung anderer Frameworks auf einfache JDBC zurückgreifen, ohne die Abstraktion zu brechen.

Während noch nicht verfügbar, erhalten Sie mit zukünftigen Updates noch mehr Goodies:

  • Einfache und einfache Möglichkeiten zum Erweitern Ihrer Repositorys mit Abfragemethoden (Sie definieren einfach Ihre Schnittstelle mit einer findByLastName-Methode und Spring erstellt sie für Sie im Handumdrehen) oder @query-Anmerkungen oder benutzerdefinierte Methoden.

  • Unterstützung für Paging

Hibernate (oder eine andere JPA-Implementierung) ohne Spring Data

JPA macht viele Dinge über JDBC

  • Caching (1., 2. Ebene und Abfrage-Cache)

  • Automatisierte Erstellung von Instanzen aus Abfragen

  • Navigation zwischen Entitäten

  • Faules Laden

Bei all dem kann es schwierig sein zu verstehen, was passiert und warum. Natürlich, IFF Sie strukturieren Ihre Anwendung richtig. Sie können einfach auf JDBC zurückgreifen, wenn JPA nicht das bietet, was Sie möchten. Ich habe es jedoch mehrmals gesehen, dass die Leute nicht die notwendige Struktur aufrechterhalten konnten, um dies zu erreichen. Das ist natürlich besonders schwierig, wenn Sie nicht genau verstehen, wie JPA funktioniert.

Hibernate (oder eine andere JPA-Implementierung) mit Spring Data

Ich habe die Vorteile von Spring Data oben aufgeführt. Führen Sie einfach ein mentales Copy & Paste aus.

Das macht den gesamten Stack natürlich noch komplexer. Aus den vielen Fragen, die mit Spring-Daten und Ruhezustand markiert wurden, scheint es, dass viele Entwickler Probleme haben, herauszufinden, welches Tool was macht. Aber auch aus diesen Fragen werden meist Probleme mit Hibernate/JPA und nicht mit Spring Data beschrieben.

Um es zusammenzufassen:

  • Wenn Sie eine fein abgestimmte Steuerung benötigen, verwenden Sie JDBC. 

  • Wenn Sie JPA verwenden, stellen Sie sicher, dass Sie es frühzeitig verstehen.

  • Wenn Sie sich für die Persistenztechnologie entscheiden, bietet Spring Data ein Modul an, ich würde es verwenden. Es wird das Leben leichter machen. Aber wieder bin ich voreingenommen. 

30
Jens Schauder

Ein Problem bei Ihrer Frage ist, dass Sie anscheinend implizieren, dass Spring Data JPA wie Hibernate ist und das eigentlich nicht stimmt. Spring Data JPA ist lediglich ein federzentrierter Wrapper, der federnde Semantiken und Funktionen bietet, die einen JPA-Anbieter einschließen, bei dem Hibernate eine Implementierung ist. 

Ergo können Sie Spring Data JPA nicht verwenden, ohne JPA-Implementierungen wie Hibernate hinzuzufügen.

Die grundlegende Frage, die Sie sich dann stellen, ist, warum JDBC gegen einen ORM verwendet wird. Um zu verstehen, dass Sie sich die Zeit nehmen sollten, um die Vorteile eines ORM zu verstehen. Es gibt zahlreiche Artikel im Internet, die Ihnen das geben können.

Aber selbst in einer ORM-gesteuerten Anwendung kann es Fälle geben, in denen Sie das ORM-Framework umgehen und natives SQL wie in JDBC verwenden müssen. Diese Fälle sind oft selten, aber notwendig, wenn Sie einige nicht unterstützte Datenbankfeatures nutzen möchten oder wenn Sie die endgültige Kontrolle über die Bearbeitung der Ergebnisse haben möchten usw. 

Der entscheidende Faktor für die Verwendung hängt letztendlich von den Anforderungen Ihrer Anwendung ab. Aber nur weil Sie sich für die Verwendung eines ORM-Frameworks entscheiden, schließt die Möglichkeit, native Abfragen und SQL-Anweisungen wie in JDBC auszuführen, nicht gegenseitig aus. Diese Funktionen sind noch verfügbar. In seltenen Fällen werden diese Funktionen normalerweise verwendet.

4
Naros

checkout requery.io , Requery bieten Performance und ORM.

auch auschecken frühlingsdatenbestellung

1
Debop

Die Sache ist, Spring Data for jpa ist eine Abstraktion über jpa, die eine Abstraktion über JDBC ist. Wenn Nizza Features anbieten, auch wenn jpa ohne es verwendbar ist. Mit Spring Data Rest wird es wirklich mächtig.

Aber je mehr ein Rahmen für Sie tut, desto mehr müssen Sie die zugrunde liegende Technologie verstehen. Dies gilt umso mehr, wenn Sie Federdatenhalter verwenden. Beginnen Sie am besten mit dem Verständnis von sql (Design und Abfragen) und dann mit jpa (verzögertes Laden, Instanzstatus, Entitäten, Einbettungen, Caches, Abfragen, Transaktionssynchronisation).

Dann probieren Sie spring-data-jpa und entscheiden, ob es Ihrem Projekt Wert bringt. Zum Speichern, Aktualisieren, Löschen und Suchen nach ID-Operationen handelt es sich im Wesentlichen um einen Wrapper um die Methoden persist, merge, remove und find von EntityManager. Der Hauptvorteil von Spring Data JPA ist die Abfrageunterstützung, aber Querydsl ist auch eine nette Option. In beiden Fällen ist ein klares Verständnis der Funktionsweise von JPA erforderlich. Als Erstes müssen Sie die SQL-Protokollierung aktivieren, um zu sehen, ob Ihre jpa-Implementierung für einen bestimmten Datenbankzugriff Abfragen ausführt, die ein Datenbankadministrator für korrekt hält. Wenn Sie beispielsweise eine Entität, die sich nicht im Cache befindet, laden, führt dies zu einer Auswahl von 1 + n. Der Komponententest wird bestanden, und Probleme beginnen in der Produktion. spring-data-jpa löst das Problem für Sie nicht.

Neben spring-data-jpa gibt es viele spring-data-*, einige bieten auch Mapping-Annotationen (zum Beispiel spring-data-cassandra), was nützlich ist, wenn keine Objekt-Db-Zuordnung vorhanden ist.

0
Gengis