[go: up one dir, main page]

Java Object Oriented Quering

Java Object Oriented Quering, comunemente conosciuto come jOOQ, è una libreria software leggera per il database-mapping in Java che implementa il pattern active record. Il suo scopo è essere sia relazionale che orientato agli oggetti fornendo un linguaggio specifico di dominio per costruire query da classi generate da uno schema di database.

jOOQ
software
GenereObject-relational mapping (non in lista)
SviluppatoreData Geekery GmbH
Sistema operativoMultipiattaforma
LinguaggioJava
LicenzaLicenza Apache e commerciale
(licenza libera)
Sito webwww.jooq.org

Paradigma

modifica

jOOQ richiede che l'SQL debba venire prima in qualsiasi integrazione di database. Di conseguenza, non introduce un nuovo linguaggio di interrogazione testuale, ma piuttosto consente la costruzione di SQL puro da oggetti e codice jOOQ generato da uno schema di database. jOOQ usa JDBC per chiamare le sottostanti query SQL.

Sebbene dia un'astrazione su JDBC, jOOQ non ha altrettanti funzionalità e complessità come le librerie object-relational mapping standard come Hibernate e JPA.

La vicinanza di jOOQ a SQL ha dei vantaggi rispetto alle librerie tipiche di object-relational mapping. SQL ha molte caratteristiche che non possono essere usate in un paradigma di programmazione orientato agli oggetti; questo insieme di differenze è conosciuto come object-relational impedance mismatch. Essendo vicino a SQL, jOOQ aiuta a prevenire errori sintattici e problemi di tipo mappatura. Inoltre, si prende cura della variabile di binding. Inoltre in jOOQ è possibile creare query molto complesse, che coinvolgono aliasing, unioni, selezioni nidificate e join complessi. Anche jOOQ supporta caratteristiche specifiche di database, come tipi user-defined, tipi enum, stored procedure e funzioni native.

Esempio

modifica

Una query nidificata che seleziona da una tabella alias:

  -- Seleziona gli autori con libri che sono terminati
  SELECT * FROM AUTHOR a
        WHERE EXISTS (SELECT 1
                   FROM BOOK
                  WHERE BOOK.STATUS = 'SOLD OUT'
                    AND BOOK.AUTHOR_ID = a.ID);

E il suo equivalente in DSL jOOQ:

  // Usa la tabella alias nel comando select
  create.selectFrom(table("AUTHOR").as("a"))
        .where(exists(selectOne()
                     .from(table("BOOK"))
                     .where(field("BOOK.STATUS").equal(field("BOOK_STATUS.SOLD_OUT")))
                     .and(field("BOOK.AUTHOR_ID").equal(field("AUTHOR.ID")))));

O più semplicemente, usando codice generato dai metadati del database che genera costanti:

  // Use the aliased table in the select statement
  final Author a = AUTHOR.as("a");

  create.selectFrom(a)
        .where(exists(selectOne()
                     .from(BOOK)
                     .where(BOOK.STATUS.equal(BOOK_STATUS.SOLD_OUT))
                     .and(BOOK.AUTHOR_ID.equal(a.ID))));

Collegamenti esterni

modifica
   Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica