Einführung in ActiveJDBC

Einführung in ActiveJDBC

1. Einführung

ActiveJDBC ist ein leichtes ORM, das den Kernideen vonActiveRecord folgt, dem primären ORM von Ruby on Rails.

Es konzentriert sich aufsimplifying the interaction with databases by removing the extra layer of typical persistence managers und auf die Verwendung von SQL, anstatt eine neue Abfragesprache zu erstellen.

Darüber hinaus bietet es eine eigene Methode zum Schreiben von Komponententests für die Datenbankinteraktion über die KlasseDBSpec.

Lassen Sie uns sehen, wie sich diese Bibliothek von anderen gängigen Java-ORMs unterscheidet und wie sie verwendet wird.

2. ActiveJDBC im Vergleich zu anderen ORMs

ActiveJDBC unterscheidet sich stark von den meisten anderen Java-ORMs. It infers the DB schema parameters from a database, thus removing the need for mapping entities to underlying tables.

No sessions, no persistence managers, keine Notwendigkeit, eine neue Abfragesprache zu lernen, keine Getter / Setter. Die Bibliothek selbst ist in Bezug auf Größe und Anzahl der Abhängigkeiten gering.

Diese Implementierung fördert die Verwendung von Testdatenbanken, die vom Framework nach der Ausführung der Tests bereinigt werden, wodurch die Kosten für die Wartung der Testdatenbanken gesenkt werden.

Ein kleiner zusätzlicher Schritt voninstrumentation ist jedoch erforderlich, wenn wir ein Modell erstellen oder aktualisieren. Wir werden dies in den kommenden Abschnitten diskutieren.

3. Design-Prinzipien

  • Ergibt Metadaten aus DB

  • Konventionsbasierte Konfiguration

  • Keine Sitzungen, kein "Anhängen, erneutes Anhängen"

  • Leichte Modelle, einfache POJOs

  • Kein Proxy

  • Vermeidung des anämischen Domänenmodells

  • DAOs und DTOs sind nicht erforderlich

4. Einrichten der Bibliothek

Ein typisches Maven-Setup für die Arbeit mit einer MySQL-Datenbank umfasst:


    org.javalite
    activejdbc
    1.4.13


    mysql
    mysql-connector-java
    5.1.34

Die neueste Version der Artefakteactivejdbc undmysql connector befindet sich im Maven Central-Repository.

Instrumentation ist der Preis für die Vereinfachung und wird bei der Arbeit mit ActiveJDBC-Projekten benötigt.

Es gibt ein Instrumentierungs-Plugin, das im Projekt konfiguriert werden muss:


    org.javalite
    activejdbc-instrumentation
    1.4.13
    
        
            process-classes
            
                instrument
            
        
    

Das neuesteactivejdbc-instrumentation-Plugin finden Sie auch in Maven Central.

Und jetzt können wir die Instrumentierung verarbeiten, indem wir einen dieser beiden Befehle ausführen:

mvn process-classes
mvn activejdbc-instrumentation:instrument

5. ActiveJDBC verwenden

5.1. Das Model

Wir können ein einfaches Modell mit nur einer Codezeile erstellen - es beinhaltet die Erweiterung derModel-Klasse.

Die Bibliothek verwendetinflections der englischen Sprache, um Konvertierungen von Plural- und Singularformen von Substantiven zu erzielen. Dies kann mit der Annotation@Tableüberschrieben werden.

Mal sehen, wie ein einfaches Modell aussieht:

import org.javalite.activejdbc.Model;

public class Employee extends Model {}

5.2. Verbindung zu einer Datenbank herstellen

Zwei Klassen -Base undDB – werden bereitgestellt, um eine Verbindung zu den Datenbanken. herzustellen

Der einfachste Weg, eine Verbindung zu einer Datenbank herzustellen, ist:

Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://host/organization", "user", "xxxxx");

Wenn Modelle in Betrieb sind, verwenden sie eine im aktuellen Thread gefundene Verbindung. Diese Verbindung wird vor jeder DB-Operation von der KlasseBase oderDB auf den lokalen Thread gestellt.

Der obige Ansatz ermöglicht eine übersichtlichere API, wodurch DB-Sitzungs- oder Persistenz-Manager wie in anderen Java-ORMs überflüssig werden.

Lassen Sie uns sehen, wie Sie mit der KlasseDBeine Verbindung zu einer Datenbank:herstellen

new DB("default").open(
  "com.mysql.jdbc.Driver",
  "jdbc:mysql://localhost/dbname",
  "root",
  "XXXXXX");

Wenn wir uns ansehen, wie unterschiedlichBase undDB für die Verbindung mit Datenbanken verwendet werden, können wir daraus schließen, dassBase verwendet werden sollten, wenn mit einer einzelnen Datenbank gearbeitet wird, undDB mit mehreren Datenbanken verwendet werden.

5.3. Datensatz einfügen

Das Hinzufügen eines Datensatzes zur Datenbank ist sehr einfach. Wie bereits erwähnt, sind keine Setter und Getter erforderlich:

Employee e = new Employee();
e.set("first_name", "Hugo");
e.set("last_name", "Choi");
e.saveIt();

Alternativ können wir den gleichen Datensatz folgendermaßen hinzufügen:

Employee employee = new Employee("Hugo","Choi");
employee.saveIt();

Oder sogar fließend:

new Employee()
 .set("first_name", "Hugo", "last_name", "Choi")
 .saveIt();

5.4. Datensatz aktualisieren

Das folgende Snippet zeigt, wie ein Datensatz aktualisiert wird:

Employee employee = Employee.findFirst("first_name = ?", "Hugo");
employee
  .set("last_name","Choi")
  .saveIt();

5.5. Datensatz löschen

Employee e = Employee.findFirst("first_name = ?", "Hugo");
e.delete();

Wenn alle Datensätze gelöscht werden müssen:

Employee.deleteAll();

Wenn Sie einen Datensatz aus einer Mastertabelle löschen möchten, die zu untergeordneten Tabellen kaskadiert, verwenden SiedeleteCascade:

Employee employee = Employee.findFirst("first_name = ?","Hugo");
employee.deleteCascade();

5.6. Einen Datensatz abrufen

Lassen Sie uns einen einzigen Datensatz aus der Datenbank holen:

Employee e = Employee.findFirst("first_name = ?", "Hugo");

Wenn wir mehrere Datensätze abrufen möchten, können wir die Methodewhereverwenden:

List employees = Employee.where("first_name = ?", "Hugo");

6. Transaktionsunterstützung

In Java ORMs gibt es eine explizite Verbindung oder ein Managerobjekt (EntityManager in JPA, SessionManager in Hibernate usw.). In ActiveJDBC gibt es so etwas nicht.

Der AufrufBase.open() öffnet eine Verbindung, hängt sie an den aktuellen Thread an und somit verwenden alle nachfolgenden Methoden aller Modelle diese Verbindung wieder. Der AufrufBase.close() schließt die Verbindung und entfernt sie aus dem aktuellen Thread.

Um Transaktionen zu verwalten, gibt es nur wenige Komfortanrufe:

Starten einer Transaktion:

Base.openTransaction();

Transaktion festschreiben:

Base.commitTransaction();

Rollback einer Transaktion:

Base.rollbackTransaction();

7. Unterstützte Datenbanken

Die neueste Version unterstützt Datenbanken wie SQLServer, MySQL, Oracle, PostgreSQL, H2, SQLite3, DB2.

8. Fazit

In diesem kurzen Tutorial haben wir uns auf die Grundlagen von ActiveJDBC konzentriert und sie untersucht.

Wie immer befindet sich der Quellcode zu diesem Artikel inover on Github.