urbanisation-si.com

urbanisation-si.com

A ma gauche Hibernate version 4.3.6 contre MyBatis version 3.2.8, qui va remporter le titre 2014 de champion ORM toute catégorie ?

urba-si-Hibernate-MyBatis.png

Hibernate est l'outil standard d'ORM (Object Relational Mapping), pour avoir une correspondance entre un modèle objet et un modèle relationnel (SQL).

Une des forces d'Hibernate est sa gestion de cache de niveau 1. Quand on demande à Hibernate de récupérer un objet, par défaut, il procède à un chargement paresseux (lazy loading) c'est à dire que tout le graphe objet n'est pas chargé en mémoire. Dans les relations 1 à plusieurs, les collections ne sont pas chargées. Hibernate a ses propres proxy permettant à la demande de charger véritablement les collections d'objets. Une des critiques à l'encontre du choix d'Hibernate au profit de MyBatis, est le fait qu'on ne peut pas synchroniser le cache de niveau 1 lorsqu'il est accédé par plusieurs applications comme c'est le cas dans la cohabitation d'anciennes applications Mainframe avec des nouvelles utilisant Java. C'est totalement inexacte, le cache peut être rafraîchi ( API refresh() ). Mais quand on se pose ce genre de questions, c'est la misère, c'est vraiment qu'on ne s'est pas posé les bonnes questions dés le départ sur l'architecture fonctionnelle et applicative. D'autre part Hibernate est le champion de la mise en oeuvre simplissime pour la gestion des accès concurrentiels avec les verrous optimistes (optimistic lock). Ce système classique consiste à gérer un numéro de version dans une colonne de la table SQL. Par exemple on récupère une ligne avec la version 10, on met à jour en mettant comme critère numéro de version = 10 qu'on va mettre à jour avec 11. Si quelqu'un d'autre entre temps a mis à jour avant vous, le numéro est déjà passé à 11 donc votre mise à jour échouera. D'une manière statistique, il se peut que le plus souvent vous soyez le seul à mettre à jour et dans ce cas tout marchera correctement. 

Hibernate nécessite de solides compétences en persistances et sur l'architecture du framework (la  gestion de la session, le lazy loading, ...). Si les développeurs ne maîtrisent pas Hibernate et la norme JPA (Java Persistance API : JPA est à l'ORM ce que JDBC (Java Data Base connectivity) est au accès aux bases SQL pour les programmes Java).

MyBatis est du JDBC amélioré ! Il ne posséde pas de langage de requêtes objet comme le HQL (Hibernate Query Language) d'Hibernate, permettant de faire du zéro SQL et de rester 100 % objet. L'avantage donc de MyBatis est de rester plus proche du SQL. Mais le problème d'accès concurrentiels reste le même avec MyBatis, il n'y a pas d'objets JDBC qui gardent les objets en mémoire !

Pour des besoins simples avec une équipe peu rodée aux piéges des ORM, maîtrisant parfaitement SQL, MyBatis s'impose. Par contre pour les gros projets, dans le cas de la normalisation de l'architecture technique pour toutes les applications d'un SI urbanisé, Hibernate est le grand gagnant des solutions ORM. 

 

"Connaître autrui n'est qu'une science ; se connaître, c'est l'intelligence."

 

Voir aussi :  http://urbanisation-si.over-blog.com/

http://urbanisation-des-si.blogspot.fr/

http://urbanisation-si.eklablog.com/

http://bonnes-pratiques-si.eklablog.com/

http://rhonamaxwel.over-blog.com/



16/10/2014
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au site

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 705 autres membres