Consulta Orientada a Objetos JOOQ - JOOQ Object Oriented Querying

jOOQ
Desenvolvedor (s) Data Geekery GmbH
Versão estável
3.14.8 / 26 de fevereiro de 2021 ; 7 meses atrás ( 2021-02-26 )
Repositório github .com / jOOQ / jOOQ
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 .org

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))));

Veja também

Referências

links externos