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 | |
---|---|
Genere | Object-relational mapping (non in lista) |
Sviluppatore | Data Geekery GmbH |
Sistema operativo | Multipiattaforma |
Linguaggio | Java |
Licenza | Licenza Apache e commerciale (licenza libera) |
Sito web | www.jooq.org |
Paradigma
modificajOOQ 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
modificaUna 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- Sito ufficiale, su jooq.org.