La librairie dont nous allons parler a la particularité d'utiliser les nouveautés de la dernière version du JDK.
Elle a été créée par Dr Ming-Yee lu + pour son projet de recherche lorsqu'il était à l'EPFL.
JinQ a pour objectif de fournir une manière simple et naturelle d'écrire des requêtes vers une base de données en Java.
JinQ propose une syntaxe basée sur le paradigme de la programmation fonctionnelle, apporté par Java 8.
Une requête écrite avec JinQ ressemblerait à ça :
database.countryStream().where(
country-> country.getName().equals("France"));
On s'aperçoit de la puissance de la syntaxe en terme de lisibilité et de concision. La ligne ci-dessus sélectionne l'ensemble des pays qui ont comme nom : "France".
On trouve la possibilité d'écrire du code concis et clair. L'exemple donné ci-dessus est assez simpliste, on peut écrire des choses plus complexes de manière très élégante.
Un des avantages de la librairie est que la requête est écrite en Java natif. Ce qui permet au moment de la compilation de vérifier la validité de la requête.
Pour son fonctionnement, JinQ a besoin d'un mapping entre les entités et la base de données (via un fichier xml ou via une description JPA). Ensuite une phase de génération du code instrumenté.
Cette phase de description et génération est très simple à mettre en œuvre.
Aujourd'hui, le framework ne permet de faire que de la lecture. Il propose toutes les fonctionnalités de jointure, d'agrégation, de mapping, etc…
Dans une architecture basée sur le pattern CQRS, cet outil trouverait sa place dans la partie Query.
Ce projet est très jeune (v 0.1), même si l'on ne peut pas l'utiliser directement en prod, il présente le véritable intérêt d'utiliser les nouveautés du JDK8 (lambda, Stream). Il offre des perspectives intéressantes.
Un projet à suivre…