Java Object Oriented Querying

Aus MARJORIE-WIKI
Wechseln zu: Navigation, Suche
Java Object Oriented Querying
Entwickler Lukas Eder
Aktuelle Version 3.16.5
(2022-03-09)
Betriebssystem plattformübergreifend
Programmier­sprache Java
Kategorie Persistenz-Framework
Lizenz Apache License 2.0
www.jooq.org

jOOQ bedeutet Java Object Oriented Querying. Es handelt sich um eine objekt-relationale Bibliothek in Java. jOOQ ist sowohl relational wie auch objektorientiert und bietet mit seiner Domain Specific Language Möglichkeiten, um Datenbankabfragen aus generierten Klassen zu konstruieren.

Paradigma[Bearbeiten]

Die wichtigste Idee hinter jOOQ ist, dass SQL in jeder Datenbankintegration an erster Stelle stehen soll. Trotz der angebotenen Abstraktion von JDBC hat es nicht soviel Funktionalität und Komplexität wie Hibernate oder JPA oder ähnliche OR-mapping Produkte. jOOQ versteht sich als Kompromiss zwischen den beiden Welten. SQL hat viele Eigenschaften, welche in einem objektorienterten Programmierparadigma keinen Platz haben. Dies ist ein grosser Nachteil des objekt-relationalen Modells.

Mit jOOQ wird keine neue textuelle Abfragesprache eingeführt. Stattdessen kann gewöhnliches SQL mittels jOOQ Objekten und generiertem Code konstruiert werden. Dies verhindert Syntaxfehler und Probleme mit Datentypen. Des weiteren werden Variablen gebunden. Ohne die Limitierungen, welche durch OR-mapping entstehen würden, ist es auch möglich komplexe Abfragen mit Alias, Unions, verschachtelten Abfragen, komplexen Joins zu formulieren. Ausserdem unterstützt jOOQ auch datenbankspezifische Eigenschaften, wie UDTs, enumerierte Typen, Stored Procedures und native Funktionen.

Beispiel[Bearbeiten]

Eine verschachtelte Abfrage welche von einem Tabellenalias selektiert.

  -- Alle Autoren, deren Bücher ausverkauft sind
  SELECT * 
    FROM T_AUTHOR a
   WHERE EXISTS (SELECT 1
                   FROM T_BOOK
                  WHERE T_BOOK.STATUS = 'SOLD OUT'
                    AND T_BOOK.AUTHOR_ID = a.ID);

Äquivalent in jOOQ DSL:

  // Erstellen eines Alias für die Autorentabelle
  Table<TAuthorRecord> a = T_AUTHOR.as("a");

  // Den Tabellenalias im Select Statement verwenden
  create.selectFrom(a)
        .where(create.exists(create.select(create.constant(1))
                                   .from(T_BOOK)
                                   .where(TBook.STATUS.equal(TBookStatus.SOLD_OUT)
                                   .and(TBook.AUTHOR_ID.equal(a.getField(TAuthor.ID))))));

Weblinks[Bearbeiten]

Info Sign.svg Dieser Wikipedia-Artikel wurde, gemäß GFDL, CC-by-sa mit der kompletten History importiert.