AccueilđŸ‡«đŸ‡·Chercher

JOOQ

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.

jOOQ

Informations
Développé par Data Geekery GmbH
DerniĂšre version 3.14.3 ()
État du projet Actif
Écrit en Java
Supporte les langages Java, Kotlin, Scala
SystĂšme d'exploitation Multiplateforme
Environnement Logiciel multiplateforme
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

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.

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. 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. 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

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

  1. (en) Lukas Eder, « A simple and intuitive approach to interface your database with Java », sur dzone.com, (consulté le )

Voir aussi

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.