Consulta Orientada a Objetos JOOQ - JOOQ Object Oriented Querying
Desenvolvedor (s) | Data Geekery GmbH |
---|---|
Versão estável | 3.14.8 / 26 de fevereiro de 2021
|
Repositório | github |
Escrito em | Java |
Sistema operacional | Plataforma cruzada |
Plataforma | Java |
Modelo | Mapeamento objeto-relacional |
Licença | Licença dupla: ASL 2.0 e comercial |
Local na rede Internet | www |
jOOQ Object Oriented Querying , comumente conhecido como jOOQ , é uma biblioteca de software de mapeamento de banco de dados leve em Java que implementa o padrão de registro ativo . Seu propósito é ser relacional e orientado a objetos , fornecendo uma linguagem específica de domínio para construir consultas a partir de classes geradas a partir de um esquema de banco de dados .
Paradigma
jOOQ afirma que o SQL deve vir primeiro em qualquer integração de banco de dados. Assim, ele não apresenta uma nova linguagem de consulta textual , mas permite a construção de SQL simples a partir de objetos jOOQ e código gerado a partir de um esquema de banco de dados. jOOQ usa JDBC para chamar as consultas SQL subjacentes.
Embora forneça abstração sobre JDBC, jOOQ não tem tanta funcionalidade e complexidade quanto bibliotecas de mapeamento relacional de objeto padrão , como EclipseLink ou Hibernate .
A proximidade do jOOQ com o SQL tem vantagens sobre as bibliotecas de mapeamento relacional de objeto típicas. O SQL possui muitos recursos que não podem ser usados em um paradigma de programação orientada a objetos ; esse conjunto de diferenças é conhecido como incompatibilidade de impedância relacional de objeto . Por estar próximo do SQL, o jOOQ ajuda a evitar erros de sintaxe e problemas de mapeamento de tipo. Além disso, a vinculação de variáveis é feita. Também é possível no jOOQ criar consultas muito complexas, que envolvem aliasing, uniões , seleções aninhadas e junções complexas . jOOQ também oferece suporte a recursos específicos de banco de dados, como UDTs , tipos de enum , procedimentos armazenados e funções nativas.
Exemplo
Uma consulta aninhada selecionando de uma tabela de alias
-- Select authors with books that are sold out
SELECT * FROM AUTHOR a
WHERE EXISTS (SELECT 1
FROM BOOK
WHERE BOOK.STATUS = 'SOLD OUT'
AND BOOK.AUTHOR_ID = a.ID);
E seu equivalente em jOOQ DSL:
// Use the aliased table in the select statement
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("a.ID")))));
Ou mais simplesmente, usando a geração de código a partir dos metadados do banco de dados para gerar constantes:
// 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))));