Recherche

Coder's IO

Tag

Orm

JinQ : Requêtes SQL et Java8

 
 
 
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…

#java8 #Jinq #orm #lambda

iBATIS – MyBatis

 

La gestion de la persistance dans une application se fait dans la plupart des cas par l’intermédiaire d’un framework de persistance type Hibernate, EclipseLink, etc.
Ils  font partie de la famille des ORMs. 

Ces outils apportent un certain confort et permettent de s’abstraire quasiment de la manipulation du SQL.
C’est très pratique et confortable ; en revanche ils peuvent présenter un inconvénient en terme de complexité d’utilisation.
En effet, dans certains cas, le mapping objet-relationnel peut être difficile à formaliser, ce qui oblige à écrire une requête en SQL natif (ou alors tordre l’outil)

Aujourd’hui (et depuis un moment déjà), il existe une alternative aux frameworks évoqués. Elle se situe entre le pur JDBC et l’ORM très sophistiqué.
L’alternative en question se nomme iBatis (ou MyBatis, depuis les versions récentes).

L’article en lien à ce post, fait une présentation de l’outil en question. L’auteur décrit les principes sur lesquels se base le framework.

Ensuite, il décrit la manière de déclarer le mapping entre les objets et la table. Dans ce paragraphe, on pourra voir les positifs et négatifs de l’outil (du point de vue de l’auteur)

Note : Il est important de noter que contrairement à un framework type Hibernate, iBatis n’a aucune connaissance directe de la structure des tables.

Pour résumer rapidement, le mapping se fait entre le résultat d’une requête SQL et les attributs d’un POJO. Ce maping est fait de manière déclarative dans un fichier XML ou par annotation. Il y a aussi la possibilité de faire un mapping dynamique en se basant sur le nom des attributs.

Cela veut dire, implicitement, que la construction des requêtes est faite en SQL standard, et ensuite vient la déclaration du mapping. A aucun moment, iBatis gérera la construction d’une requête. Vous pourrez voir des exemples dans l’article.

Dans le paragraphe suivant, il évoque la notion de sessionFactory pour ce qui est de la gestion du contexte de persistance. 

Note : MyBatis s’intègre avec Spring.

A l’instar du mapping dynamique, il est possible d’avoir des requêtes dynamiques qui, par rapport à un contexte 'données', vont pouvoir conditionner le contenu de la clause WHERE.

Comme tous outils de persistance de type ORM, on a à disposition un outil permettant d’optimiser le temps passé pour faire le mapping initial. C’est ce que nous présente l’auteur dans la paragraphe : MyBatis Generator.

Cet outil présente des avantages et des inconvénients. Je pense que cet outil peut adresser des projets ayant une taille modérée.
Il a le mérite d’avoir une approche très pragmatique vis à vis de la gestion du mapping.

C'est un outil que l’on n'utilisera pas forcément tous jours. Mais je pense qu’il est important de connaitre son existence et de bien comprendre ses mécanismes. A lire donc et à ajouter aux favoris 🙂

#java #myBatis #iBatis #orm #basededonnées  

ORM Lite

Comme son nom l’indique, ORM Lite offre un framework léger autour du mapping objet/relationnel.

La force de cet outil réside dans sa rapidité de mise en place et sa simplicité de prise en main.
Après avoir récupéré l’archive de l’outil, il suffit de 2 lignes de configuration de manière programmatique pour qu’il soit opérationnel et prêt à persister vos objets du modèle.

De la même manière, ORM Lite fournit une factory (DAOManager) permettant de créer rapidement des DAOs à partir de la classe de l'objet persisté.
Au delà des méthodes ‘classiques‘ fournies par les DAOs, un QueryBuilder est proposé afin de pouvoir implémenter des requêtes plus complexes, sur les bases d’un DSL.

Les objets du modèle sont déclarés à partir d’un jeu d’annotations simple et expressif.

Un système de cache est disponible, ce qui permet d’optimiser sa couche d’accès aux données en termes de temps de réponse et d’activité sur le serveur.

Volontairement je ne les nomme pas entity pour éviter de faire référence à l’annotation @Entity qui donne leurs noms aux objets mappés.

Comme les célèbres frameworks de ce type, ORM Lite donne la possibilité de prendre en charge des spécificités de la base de données sous-jacente (DatabaseType).

Les transactions sont supportées d’une manière simple en se basant sur un système de callback.

Le projet propose une version adaptée à la plateforme Android. Pour l’avoir déjà utilisé dans ce cadre là, c’est très confortable de pouvoir travailler avec un ORM sur une plateforme où l’octet est compté.
L’ensemble des bases de données sont supportées. Si une base spécifique n’est pas supportée, il est possible d’étendre le framework facilement.

Une intégration avec Spring est également proposée.

Une seule ombre au tableau : on sort des standards par rapport à la spécification régissant l’ORM (JPA).

Tous les points évoqués ci-dessus mettent en évidence l’ensemble des fonctionnalités du framework. On peut se rendre compte que, malgré sa simplicité d'utilisation, l’outil est très complet.

La documentation est riche et fournit beaucoup d'exemples permettant de monter rapidement en compétence sur le sujet.

#java #orm #ormLite #persistence

Créez un site Web ou un blog gratuitement sur WordPress.com.

Retour en haut ↑

Concevoir un site comme celui-ci avec WordPress.com
Commencer