Frage

Um den Datenzugriffscode in unserer Anwendung implementieren wir einen Rahmen brauchen um jdbc zu wickeln (ORM ist nicht unsere Wahl, weil die Skalierbarkeit).

Der kühlste Rahmen habe ich mit zu arbeiten, ist Frühlings-Jdbc . Allerdings ist die Politik meines Unternehmens externe Abhängigkeiten zu vermeiden, vor allem Feder, J2EE, usw. So denken wir über eigenen praktisch gemachten jdbc Rahmen zu schreiben, mit Funktionalität ähnlich Feder jdbc:. Zeilenzuordnung, Fehlerbehandlung, Merkmale von java5 unterstützt, aber ohne Transaktionsunterstützung

Hat jemand Erfahrung mit solchen jdbc Wrapper Rahmen zu schreiben? Wenn jemand Erfahrung mit anderen jdbc Wrapper-Frameworks hat, bitte teilen Sie Ihre Erfahrungen.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Wir schrieben unsere eigenen Wrapper. Dieses Thema ist von einem Papier wert, aber ich bezweifle, dass ich jemals Zeit, es zu schreiben haben werden, so sind hier einige wichtige Punkte:

  • Wir umarmten SQL und machte keinen Versuch, es zu verbergen. die einzige zwicken war die Unterstützung für benannte Parameter hinzuzufügen. Parameter sind wichtig, weil wir den Einsatz von On-the-fly-SQL (aus Sicherheitsgründen) nicht fördern, und wir verwenden PreparedStatements immer.

  • für Verbindungsmanagement, haben wir Apache DBCP. Das war praktisch zu der Zeit, aber es ist unklar, wie viel von diesem mit modernen JDBC-Implementierungen benötigt wird (die Dokumentation auf diesem Zeug fehlt). DBCP auch Pools PreparedStatements.

  • wir haben nicht mit Zeilenzuordnung stören. statt (für Rückfragen) haben wir etwas Ähnliches wie die Apache DBUtil des ResultSetHandler, die Sie zu „füttern“ die Ergebnismenge in ein Verfahren ermöglicht, die die Informationen dann abladen können, wo Sie es möchten. Dies ist flexibler, und in der Tat wäre es nicht schwierig sein, eine ResultSetHandler für Zeile Zuordnung zu implementieren. für Einsätze / Updates haben wir eine generische Datensatzklasse (im Grunde ein hashmap mit einigem zusätzlichen Schnickschnack). das größte Problem mit Zeilenzuordnung (für uns) ist, dass Sie so schnell stecken, wie Sie eine „interessante“ Abfrage tun, weil Sie Felder haben können, die auf verschiedene Klassen abzubilden; aber eine flache Ergebnismenge, weil Sie eine hierarchische Klassenstruktur aufweisen können; oder weil die Abbildung ist komplex und datenabhängigem.

  • wir in Fehlerprotokollierung gebaut. für die Ausnahmebehandlung. auf einer Abfrage wir fangen und sich einzuloggen, aber für ein Update wir trap, Protokoll- und rethrow eine ungeprüfte Ausnahmen

  • Wir Transaktionsunterstützung mit einem Wrapper-Ansatz zur Verfügung gestellt. der Anrufer stellt den Code, die Transaktion durchführt, und wir stellen sicher, dass die Transaktion ordnungsgemäß verwaltet wird, ohne die Möglichkeit zu vergessen, die Transaktion und mit Rollbacks und Fehlerbehandlung eingebaut.

  • beenden
  • später fügten wir eine sehr einfache Beziehung Schema, das ein einzelnes Update ermöglicht / einfügen, um einen Datensatz mit allen seinen Abhängigkeiten anzuwenden. Dinge einfach zu halten, wir haben das nicht auf Abfragen verwenden, und wir beschlossen, speziell das nicht mit Löschungen zu unterstützen, weil sie zuverlässiger ist kaskadiert Löschungen zu verwenden.

Dieser Wrapper in zwei Projekten bisher erfolgreich eingesetzt wurde. Es ist natürlich leicht, aber in diesen Tagen jeder sagt, ihr Code ist leicht. Noch wichtiger ist, erhöht es die Produktivität von Programmierern, verringert sich die Anzahl der Fehler (und macht Probleme leichter aufzuspüren), und es ist relativ einfach, wenn zu verfolgen durch sein muss, weil wir gerade in das Hinzufügen viele Schichten nicht glauben schöne Architektur zu bieten.

Andere Tipps

Frühlings-JDBC ist fantastisch. Bedenken Sie, dass für ein Open-Source-Projekt wie Spring die Kehrseite der externen Abhängigkeit minimiert wird. Sie können die stabilste Version von Spring nehmen, die Ihre JDBC Abstraktions Anforderungen genügt und Sie wissen, dass Sie immer in der Lage sein werden, die Quellcode selbst zu ändern, wenn Sie jemals in ein Problem laufen - ohne auf eine externe Partei abhängig. Sie können auch die Umsetzung für alle Sicherheitsprobleme untersuchen, die Ihre Organisation mit dem Code von einer externen Partei geschrieben haben könnte.

Der, den ich lieber: Dalesbred . Es MIT lizenziert.

Ein einfaches Beispiel für alle Zeilen für eine benutzerdefinierte Klasse bekommt (Abteilung).

List<Department> departments = db.findAll(Department.class,
    "select id, name from department");

, wenn die benutzerdefinierte Klasse ist wie folgt definiert:

public final class Department {
    private final int id;
    private final String name;

    public Department(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

Disclaimer: es ist von einer Firma für die ich arbeite

.

Das klingt wie eine sehr kurzsichtige Entscheidung. Betrachten wir die Kosten für die Entwicklung / Aufrechterhaltung eines solchen Rahmens, vor allem, wenn Sie es bekommen können, und es ist Quellcode kostenlos. Nicht nur, dass Sie nicht die Entwicklung selbst tun, können Sie es nach Belieben ändern kann, wenn es sein muss.

Dass gesagt wird, was Sie wirklich duplizieren müssen, ist der Begriff der JdbcTemplate und es ist Rückrufe (PreparedStatementCreator, PreparedStatementCallback) sowie und RowMapper / RowCallbackHandler. Es sollte so etwas zu schreiben, nicht zu kompliziert werden (besonders wenn man bedenkt Sie nicht das Transaktionsmanagement zu tun haben).

Howver, wie ich gesagt habe, warum sie schreiben, wenn Sie es kostenlos bekommen und den Quellcode ändern, wie Sie sehen, passen?

Versuchen Sie JdbcSession von jcabi-jdbc . Es ist so einfach wie JDBC sollte sein, zum Beispiel:

String name = new JdbcSession(source)
  .sql("SELECT name FROM foo WHERE id = ?")
  .set(123)
  .select(new SingleOutcome<String>(String.class));

Das ist es.

mJDBC: https://mjdbc.github.io/

Ich benutze es seit Jahren und fand es sehr nützlich.

Es wird von JDBI Bibliothek inspiriert ist, aber keine Abhängigkeiten hat, fügt Transaktionen Unterstützung bietet Leistungsindikatoren und ermöglicht auf die niedrigste mögliche SQL-Ebene in Java (plain JDBC API) leicht in dem Fall zu wechseln, wenn Sie es wirklich brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top