2017-02-14 1 views
1

Es gibt viele Technologien, um mit Java auf Daten zuzugreifen. ich über einige von ihnen las, einschließlich:Verschiedene Möglichkeiten zum Zugriff auf die Datenbank in Java

  • JPQL
  • HQL
  • Criteria API
  • Querydsl
  • jOOQ
  • JaQu
  • JDBC
  • ActiveJDBC

Jetzt bin ich wirklich wegen des Aufwands verwirrt. Was sind die Hauptunterschiede und Gemeinsamkeiten zwischen diesen Technologien? Welche werden am häufigsten verwendet? Ein kurzer Vergleich ist mehr als willkommen.

+0

Dies ist kein Diskussionsforum - es ist für spezifische Programmierfragen. Antworten darauf werden fast immer geäußert, was auch hier verpönt ist. – csmckelvey

+0

Ich möchte nur verstehen, wie diese Technologien zusammenhängen. Persönliche Meinung ist nicht das Ziel dieser Frage –

+1

@takendarkk Ich sehe es als die Verwirrung der nicht zu wissen, wo ich anfangen soll, was passiert, wenn Sie "Java SQL Query" googlen und nicht viel Exposition gegenüber der Geschichte von JDBC/JDO/JPA mit der Explosion von besser als SQL-Abfrage Ansätze/Fluent Query APIs. –

Antwort

3

Die grundlegende Grundlage für den Datenbankzugriff in Java ist JDBC. Es ist eine Schnittstelle (keine Implementierung), die es Datenbankanbietern erlaubt, ihre Datenbanken auf eine standardisierte Art und Weise verfügbar zu machen, so dass Java-Programmierer ihren Code nicht radikal ändern müssen, um verschiedene relationale Datenbanken zu unterstützen.

Das heißt, es akzeptiert SQL, und SQL ist Standard, mit so vielen Varianten, dass die Standards keine Cross-Datenbank-Portabilität erlauben.

Die übrigen Plattformen neigen dazu, auf JDBC aufzubauen, um die Integrationskosten für andere Datenbanken zu senken. Die Anzahl der Möglichkeiten, wie man mit einer Datenbank interagieren kann, ist vielfältig. Grundsätzlich erhalten Sie eine Verbesserung bei der Ausgabe von SQL-Befehlen oder die zusätzliche Bibliothek übernimmt das Schreiben eines kompatiblen SQL-Befehls für Sie.

Die beiden Hauptkategorien sind "datenbankähnlich" und "Objektspeicher", wobei sich der Objektspeicher auf das Speichern eines Java-Objekts konzentriert und die Bibliotheken sich um die meisten Details der SQL-Generierung kümmern.

Technology    /query language/type  /notes 

Java Persistance API  /JPQL   /object store/not an implementation, but an interface allowing multiple implementations, query language is not table specific, but object specific 
Hibernate    /HQL   /object store/a popular Java solution, but tied to Hibernate only. 
Java Persistance API  /Criteria API /object store/Criteria API is the code (programming) equivalent to the JPQL strings. 
Java Persistance API & JDO/QueryDSL API /object store/Java API to build queries similar to Criteria API, but different 
JDBC      /jOOQ   /direct JDBC/Java API that replaces SQL strings construction with method calls that are table centric 
H2 database    /JaQu   /object store/Linked directly to one database, non-portable. Follows Microsoft LINQ syntax. 
JDBC      /ActiveJDBC /object store/Looks like a branded version of almost-JPA for webapps. 

Die beiden grundlegenden APIs in diesem Raum sind JDBC und JDO, wo die Teilmenge von JDO Sie wünschen, wenn Sie verwenden werden relationale Datenbanken unterstützen JPA ist. Weder JDBC noch JDO stellen direkt eine Datenbankverbindung bereit, sie sind reine APIs. Das heißt, viele Datenbankanbieter pushen ihre APIs, die diese Technologien nicht nutzen, würde ich raten, keine Technologie zu verwenden, die nicht auf JDBC und JPA basiert.

Um mehrere Implementierungen zu nutzen, würde ich auch empfehlen, dass Sie keine Abfragesprache verwenden, die nicht auf JPQL (wenn Sie Abfragen in Strings erstellen) oder CriteriaAPI (wenn Sie Abfragen im Code erstellen) basiert sind konzeptionelle Komponenten der JPA. Wenn Sie JDBC direkt verwenden, verwenden Sie PreparedStatements für das gesamte ausgegebene SQL, und beachten Sie, dass Sie zwar Ihre vorhandene SQL-Codebasis mit einer reinen JDBC-Lösung nutzen können, jedoch eine bessere Implementierung (und möglicherweise eine schnellere Bereitstellung) erhalten. Verwenden von JPA, da es viele Eckfälle beim Zuordnen relationaler Datenbanken zu Java gibt, die nur sehr wenige vorhandene Datenbankcodebasen verarbeiten.

0

Schreiben Sie keinen JDBC-Code. Sie werden nie eine bessere Arbeit als MyBatis und/oder Hibernate tun.

Stattdessen lernen und verwenden Sie entweder MyBatis oder Hibernate.

MyBatis ist einfacher (und wahrscheinlich ausreichend für alles, was Sie brauchen) und Hibernate hat eine Million Funktionen (von denen Sie wahrscheinlich keine brauchen).

Verwandte Themen