Spring-Daten JDBC / Spring-Daten JPA vs Hibernate

8

Was sind die typischen realen Lebensszenarien, in denen man Spring Data JDBC / Spring Data JPA vs Hibernate wählen würde? Ich würde gerne die Szenarien verstehen, in denen diese beiden Implementierungen am besten geeignet sind.

    
Punter Vicky 26.02.2017, 15:01
quelle

2 Antworten

14

Wie @Naros sagte, funktioniert die Frage, wie sie derzeit im Titel steht, nicht wirklich. Es scheint, wir sollten uns 4 Optionen anschauen und die Vorteile jedes Ansatzes auflisten, die Nachteile sind die Abwesenheit der Vorteile des anderen:

JDBC ohne Spring-Daten

Sie erhalten eine 100% fein abgestimmte Kontrolle über das, was gerade passiert. Von einem Framework wird nichts generiert oder injiziert. Das klingt vielleicht wie eine Con, aber wenn Sie versucht haben, Mappings und Konfigurationen zu optimieren, um eine JPA-Implementierung zu bekommen, die 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 finde, dass Spring Data einfach ist, aber ich bin voreingenommen (siehe mein Profil). Aber JPA ist sicherlich eine Herausforderung, sobald Sie den Bereich der trivialen Entitäten und Setup verlassen.

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

Sie möchten wahrscheinlich eine Bibliothek verwenden, um den Standardcode zu reduzieren. Schau dir an:

  • JOOQ

  • MyBatis

  • Spring JdbcTemplate (verwendbar ohne den Rest von Spring)

  • QueryDsl

JDBC mit Spring Data

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

  • Repositories mit CRUD-Methoden aus der Box.

  • Schöne und einfache Möglichkeiten, Ihre Repositories um Abfragemethoden zu erweitern (Sie definieren Ihre Schnittstelle so, dass sie eine findByLastName -Methode und Spring für Sie im laufenden Betrieb generiert) oder @query -Anmerkungen oder benutzerdefinierte Methoden.

  • Gute Integration in die Spring-Infrastruktur, für Transaktionsverarbeitung, Dependency-Injection, Fehlerübersetzung, Paging ...

Leider gibt es derzeit kein offizielles Spring Data JDBC-Modul. Update: Jetzt gibt es tatsächlich ein Spring Data JDBC-Modul. Es ist immer noch in seinen frühen Veröffentlichungen und wahrscheinlich sehr rau an den Rändern.

Es gibt auch Ссылка , das nicht allzu aktiv zu sein scheint. Obwohl es nicht vollständig ist, bietet es eine gesunde Dosis der oben genannten Vorteile.

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

JPA macht eine Menge Dinge über JPA

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

  • Automatisierte Erstellung von Instanzen aus Abfragen

  • Navigation zwischen Entitäten

  • Lazy Laden

Wenn all das geschieht, 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 wollen. Aber ich habe es mehrmals gesehen, dass die Leute die Struktur, die dafür benötigt wurde, nicht aufrechterhalten konnten. Offensichtlich ist dies besonders schwierig, wenn Sie nicht richtig verstehen, wie JPA funktioniert.

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

Ich habe oben die Vorteile von Spring Data aufgeführt, führe einfach eine Mental Copy & Amp; Paste durch.

Das macht natürlich den kompletten Stack noch komplexer. Aus den vielen mit feder-data UND hibernate gekennzeichneten Fragen scheint es, dass viele Entwickler Probleme haben, herauszufinden, welches Tool was macht. Aber auch beim Betrachten dieser Fragen beschreiben die meisten Probleme mit Hibernate / JPA und nicht Spring Data.

Um es zu vervollständigen:

  • Wenn Sie feinkörnige Kontrolle wünschen / brauchen, benutzen Sie JDBC über JPA.

  • Wenn Sie JPA verwenden möchten, vergewissern Sie sich, dass Sie es früh verstanden haben.

  • Wenn für die Persistenz-Technologie, die Sie wählen, Spring Data ein Modul bietet, würde ich es verwenden. Es wird das Leben leichter machen. Aber wieder bin ich voreingenommen.

Jens Schauder 27.02.2017, 14:44
quelle
4

Ein Problem mit Ihrer Frage besteht darin, dass Sie meinen, Spring Data JPA sei wie Hibernate und das stimmt nicht. Spring Data JPA ist lediglich ein federzentrierter Wrapper, der eine springende Semantik und Funktionen bietet, die einen JPA-Anbieter umschließen, von dem Hibernate eine Implementierung ist.

Daher können Sie Spring Data JPA nicht verwenden, ohne eine JPA-Implementierung wie Hibernate zu integrieren.

Die Grundfrage, die Sie sich dann stellen, ist, warum Sie JDBC gegen ein ORM verwenden. Um zu verstehen, dass Sie sich 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 wird es Fälle geben, in denen Sie das ORM-Framework umgehen und natives SQL genauso verwenden müssen wie in JDBC. Diese Fälle sind oft selten, aber notwendig, wenn Sie ein nicht unterstütztes Datenbankfeature nutzen oder die Ergebnisse manipulieren möchten.

Der entscheidende Faktor für die endgültige Verwendung hängt von den Anforderungen Ihrer Anwendung ab. Aber nur weil Sie sich dafür entscheiden, ein ORM-Framework zu verwenden, schließt dies nicht die Möglichkeit aus, native Abfragen und SQL-Anweisungen wie in JDBC auszuführen. Diese Funktionen sind immer noch verfügbar, Sie verwenden diese normalerweise nur in seltenen Fällen.

    
Naros 26.02.2017 19:22
quelle