jOOQ, acronyme pour java Object Oriented Querying en français : « programmation java orientée requête », est une bibliothèque logicielle légère de mapping de base de données en Java qui implémente le patron de conception active record. Son objectif est d'être à la fois relationnel et orienté objet en fournissant un langage spécifique au domaine pour construire des requêtes à partir de classes générées à partir d'un schéma de base de données[réf. nécessaire].

jOOQ

Informations
Développé par Data Geekery GmbH
Dernière version 3.14.3 (10 novembre 2020)
État du projet Actif
Écrit en Java
Supporte les langages Java, Kotlin, Scala
Système d'exploitation Multiplateforme (d)Voir et modifier les données sur Wikidata
Environnement Logiciel multiplateforme
Formats lus Script SQL (d) et Java language source code file (d)Voir et modifier les données sur Wikidata
Type Mapping objet-relationnel
Licence Licence variable selon la licence du SGBD piloté par jOOQ
Site web http://www.jooq.org

Chronologie des versions

Paradigme

modifier

jOOQ prétend que le SQL devrait être prioritaire lors de l'intégration d'une base de données dans un logiciel. Ainsi, il n'introduit pas de nouveau langage de requête textuelle, mais permet plutôt de construire du SQL brut à partir d'objets jOOQ et de code généré à partir du schéma de la base de données. jOOQ utilise JDBC pour appeler les requêtes SQL sous-jacentes[réf. nécessaire].

Il s'inscrit dans la logique de la programmation fonctionnelle en cherchant à masquer les détails d'implémentation des accès BDD pour ne garder que le métier attendu.

Bien qu'il fournisse une abstraction au-dessus du JDBC, jOOQ propose moins de fonctionnalités et de complexité que les ORM standards tels que EclipseLink ou Hibernate[1].

La proximité de jOOQ avec SQL présente des avantages par rapport aux ORM[réf. nécessaire]. SQL a de nombreuses fonctionnalités qui ne peuvent pas être utilisées dans un paradigme de programmation orienté objet ; cet ensemble de différences est appelé : object-relational impedance mismatch (écart paradigmatique objet-relationnel).

En étant proche de SQL, jOOQ permet d'éviter les erreurs de syntaxe et les problèmes de mapping de type dû à l'abondance de déclaration au format String qui ne permet pas de validation à la compilation[réf. nécessaire]. En générant le code à partir de la base de données, les classes générées permettent de s'assurer dès la compilation que les requêtes sont valides vis-à-vis de l'état de la base de données.

En outre, le remplissage de variables est pris en charge, permettant la construction de procédures stockées dans le code.

Il est également possible dans jOOQ de créer des requêtes très complexes, qui impliquent des alias, des unions, des sélections imbriquées et des jointures.

jOOQ prend également en charge des fonctionnalités spécifiques aux bases de données, telles que les UDT, les types enumérés, les procédures stockées et les fonctions natives[1].

Exemple

modifier

Une requête imbriquée sélectionnant dans une table aliasée :

 -- Sélectionne les auteurs avec des ayant un livre 'sold out'
 SELECT * FROM AUTHOR a
    WHERE EXISTS (SELECT 1
          FROM BOOK
         WHERE BOOK.STATUS = 'SOLD OUT'
          AND BOOK.AUTHOR_ID = a.ID);

Et son équivalent dans le langage dédié jOOQ :

 // Utilise une table aliasée dans le 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("a.ID")))));

Ou, plus simplement, en utilisant la génération de code à partir des métadonnées de la base de données :

 // Utilise une table aliasée dans le select
 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))));

Notes et références

modifier
  1. a et b (en) Lukas Eder, « A simple and intuitive approach to interface your database with Java », sur dzone.com, 14 décembre 2010 (consulté le 24 mai 2021)

Voir aussi

modifier

Articles connexes

modifier

Liens externes

modifier


📚 Artikel Terkait di Wikipedia

QVT

Krakowiak 2019, p. 30. (en) Luiz F. Capretz, « A brief history of the object-oriented approach », Software Engineering Notes,‎ mars 2003, p. 7 (DOI 10.1145/638750

Web des objets

A Design and Implementation of Wireless Sensor Gateway for Efficient Querying and Managing through World Wide Web, 2003, 1090 - 1097 p. (DOI 10.1109/TCE

Réingénierie logicielle

1145/1134285.1134395, lire en ligne) (en) B. Kullbach et A. Winter, « Querying as an enabling technology in software reengineering, », Software Maintenance