Java Object Oriented Quering
# 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.

## Paradigma

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

Una query nidificata che seleziona da una tabella alias:

E il suo equivalente in DSL jOOQ:

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

