Chapitre 1 Hibernate et Mybatis
Hibernate est actuellement le cadre de cartographie O / R le plus populaire. Il est né à SF.NET et est maintenant devenu une partie de JBoss. Mybatis est un autre excellent cadre de cartographie O / R. Appartient actuellement à un sous-projet d'Apache.
MyBatis références site Web officiel: http://www.mybatis.org/core/zh/index.html
Hibernate Reference Materials: http://docs.jboss.org/hibernate/core/3.6/reference/zh-cn/html_single/
1.1 Introduction à l'hibernate
Hibernate fournit une encapsulation relativement complète de la structure de la base de données. Le mappage O / R de Hibernate implémente le mappage entre les tables POJO et la base de données, ainsi que la génération automatique et l'exécution de SQL. Les programmeurs n'ont souvent qu'à définir la relation de cartographie entre PoJO et les tables de base de données, et peuvent terminer les opérations de couche de persistance à travers les méthodes fournies par Hibernate. Les programmeurs n'ont même pas besoin d'être compétents dans SQL. HiberNate / OJB générera automatiquement le SQL correspondant et appellera l'interface JDBC à exécuter en fonction de la logique de stockage établie.
1.2 Introduction à Mybatis
L'objectif d'Ibatis est sur la relation de cartographie entre Pojo et SQL. Ensuite, en mappant le fichier de configuration, les paramètres requis par SQL et les champs de résultats renvoyés sont mappés au POJO spécifié. Par rapport à Hibernate "O / R", Ibatis est une implémentation ORM de "mappage SQL".
Chapitre 2 Comparaison du développement
Vitesse de développement
La vraie maîtrise de l'hibernate est plus difficile que Mybatis. MyBatis Framework est relativement simple et facile à utiliser, mais il est également relativement simple. Personnellement, je pense que pour bien utiliser Mybatis, vous devez d'abord comprendre l'hibernate.
Communauté du développement
Hibernate et Mybatis sont tous deux des cadres de développement de couche de persistance populaires, mais la communauté de développement Hibernate est relativement animée, prend en charge de nombreux outils et les mises à jour sont plus rapides. La version la plus élevée actuelle est de 4.1.8. Mybatis est relativement calme et a moins d'outils, et la version la plus élevée actuelle est de 3,2.
Charge de travail de développement
Hibernate et Mybatis ont des outils de génération de code correspondants. Des méthodes de couche DAO simples et de base peuvent être générées.
Pour les requêtes avancées, MyBatis nécessite une écriture manuelle des instructions SQL et des résultats. Hibernate a un bon mécanisme de cartographie, les développeurs n'ont donc pas besoin de se soucier de la génération SQL et de la cartographie des résultats, et peuvent se concentrer davantage sur les processus métier.
Chapitre 3 Comparaison du réglage du système
Le plan de réglage d'Hibernate élabore une stratégie de mise en cache raisonnable;
Essayez d'utiliser la fonction de chargement paresseux;
Adopter un mécanisme de gestion des sessions raisonnable;
Utilisez la saisie par lots et définissez des paramètres de lots raisonnables (Batch_Size);
Effectuer une conception de cartographie O / R raisonnable
Solution de réglage mybatis
MyBatis est cohérent avec le cycle de vie de la session d'Hibernate en termes de session, et un mécanisme de gestion de session raisonnable est également requis. Mybatis a également un mécanisme de cache de niveau 2. MyBatis peut effectuer une conception d'optimisation SQL détaillée.
Aspects d'optimisation SQL
La requête d'Hibernate interrogera tous les champs du tableau, ce qui entraînera la consommation de performances. Hibernate peut également écrire SQL lui-même pour spécifier les champs qui doivent être interrogés, mais cela détruit la simplicité du développement d'hibernate. SQL de MyBatis est écrit manuellement, vous pouvez donc spécifier les champs de requête selon les besoins.
Le réglage des instructions HQL Hibernate nécessite l'impression de SQL, et beaucoup de gens n'aiment pas SQL d'Hibernate car il est trop moche. Le SQL de Mybatis est écrit manuellement par vous-même, il est donc facile de s'adapter. Mais Hibernate a ses propres statistiques de journal. MyBatis lui-même ne contient pas de statistiques de journal et utilise log4j pour la journalisation.
Évolutivité
L'association entre les bases de données Hibernate et spécifiques ne doit être configurée que dans le fichier XML. Toutes les instructions HQL n'ont rien à voir avec la base de données spécifique utilisée et sont très portables. Toutes les instructions SQL du projet MyBatis dépendent de la base de données utilisée, de sorte que la prise en charge des différents types de bases de données n'est pas bonne.
Chapitre 4 Gestion des objets et stratégies rampantes
Gestion des objets
Hibernate est une solution complète de mappage objet / relationnel qui fournit la fonctionnalité de la gestion de l'état d'objet, afin que les développeurs n'aient plus besoin de prêter attention aux détails du système de base de données sous-jacent. Autrement dit, par rapport aux scénarios de couche de persistance JDBC / SQL communs qui nécessitent la gestion des instructions SQL, Hibernate adopte une perspective orientée objet plus naturelle pour persister les données dans les applications Java.
En d'autres termes, les développeurs utilisant Hibernate doivent toujours prêter attention à l'état de l'objet et n'ont pas à considérer l'exécution des instructions SQL. Cette partie des détails a été gérée par Hibernate et seuls les développeurs doivent comprendre lors de l'élimination des performances du système.
MyBatis n'a aucune documentation dans ce domaine et les utilisateurs doivent gérer les objets eux-mêmes en détail.
Stratégie de rampe
Hibernate a un bon mécanisme pour ramper les objets associés à l'entité. Pour chaque relation d'association, il peut être défini en détail de retarder le chargement, et quatre modes sont fournis: la rampe d'association, le rampage de la requête, la sous-requête rampante et la rampe par lots. Il est configuré et traité en détail.
Le chargement paresseux de MyBatis est configuré à l'échelle mondiale.
Chapitre 5 Comparaison des mécanismes de cache
Cache hibernate
Le cache Hibernate Level 1 est un cache de session. Si vous faites bon usage du cache de niveau 1, vous devez bien gérer le cycle de vie de la session. Il est recommandé d'utiliser une session dans une opération d'action. Le cache de niveau 1 nécessite une gestion stricte de la session.
Le cache Hibernate Level 2 est un cache de niveau SessionFactory. Le cache de SessionFactory est divisé en cache intégré et cache externe. Le cache intégré stocke les données contenues dans certains attributs de collecte de l'objet SessionFactory (cartographie des données des éléments et des instructions SQL prédéterminées, etc.), qui est en lecture seule pour les applications. Le cache externe stocke une copie des données de la base de données, qui est similaire au cache primaire. En plus d'utiliser la mémoire comme support de stockage, le cache secondaire peut également utiliser des périphériques de stockage externes tels que les disques durs. Le cache secondaire est appelé cache au niveau du processus ou cache de niveau SessionFactory. Il peut être partagé par toutes les sessions, et son cycle de vie existe et disparaît avec le cycle de vie de la SessionFactory.
Cache mybatis
MyBatis contient une fonction de cache de requête très puissante qui peut être configurée et personnalisée très facilement. De nombreuses améliorations à l'implémentation du cache dans MyBatis 3 ont été implémentées, ce qui la rend plus puissante et plus facile à configurer.
Par défaut, la mise en cache n'est pas activée. En plus du cache de session local, il peut améliorer la monétisation et gérer les dépendances circulaires est également nécessaire. Pour activer le cache de niveau 2, vous devez ajouter une ligne à votre fichier de mappage SQL: <cache />
C'est ça littéralement. L'effet de cette déclaration simple est le suivant:
Toutes les instructions de sélection dans le fichier d'instruction de mappage seront mises en cache.
Toutes les instructions INSERT, UPDATE et DELETE dans le fichier de l'instruction de mappage actualisent le cache.
Le cache sera récupéré en utilisant l'algorithme le moins utilisé (LRU, le moins récemment utilisé).
Selon l'horaire (comme aucun intervalle de rinçage, pas d'intervalle de rafraîchissement), le cache ne sera actualisé dans aucun ordre chronologique.
Le cache stocke 1024 références à une collection ou un objet de liste (quelle que soit ce que la méthode de requête renvoie).
Le cache est considéré comme un cache de lecture / écriture (lisible / écrivable), ce qui signifie que la récupération d'objets n'est pas partagée et peut être modifiée en toute sécurité par l'appelant sans interférer avec des modifications potentielles apportées par d'autres appelants ou threads.
Toutes ces propriétés peuvent être modifiées par les propriétés des éléments de cache.
Par exemple: <cache expection = "fifo" flushinterval = "60000" size = "512" readonly = "true" />
Cette configuration plus avancée crée un cache FIFO et actualise toutes les 60 secondes, enregistrant 512 références à l'objet ou à la liste du résultat, et l'objet retourné est considéré comme en lecture seule, donc les modifier entre les appelants dans différents threads mènera à des conflits. Les stratégies de récupération disponibles sont la valeur par défaut LRU:
LRU le moins récemment utilisé: supprimer les objets qui n'ont pas été utilisés depuis longtemps.
FIFO First-in First-Out: Supprimez les objets dans l'ordre dans lequel ils entrent dans le cache.
Soft Soft Reference: supprime les objets basés sur l'état du collecteur des ordures et les règles de référence souples.
Références faibles faibles: supprimer plus agressivement des objets basés sur l'état du collecteur des ordures et les règles de référence faibles.
FlushInterval peut être réglé sur n'importe quel entier positif, et ils représentent une période de temps raisonnable en millisecondes. La valeur par défaut n'est pas définie, c'est-à-dire qu'il n'y a pas d'intervalle de rafraîchissement et le cache n'est actualisé que lorsque l'instruction est appelée.
La taille (nombre de références) peut être définie sur n'importe quel entier positif, n'oubliez pas le nombre d'objets que vous cachez et le nombre de ressources de mémoire disponibles dans votre environnement de course. La valeur par défaut est 1024.
La propriété ReadOnly peut être définie sur True ou False. Un cache en lecture seule renvoie la même instance de l'objet de cache à tous les appelants. Par conséquent, ces objets ne peuvent pas être modifiés. Cela offre des avantages de performance importants. Un cache lisible et écrivain renvoie une copie de l'objet de cache (par sérialisation). Ce sera plus lent, mais sûr, il est donc faux par défaut.
Similitudes
En plus d'utiliser le mécanisme de mise en cache par défaut du système, les caches secondaires Hibernate et MyBatis peuvent complètement écraser le comportement du cache en implémentant votre propre cache ou en créant des adaptateurs pour d'autres solutions de cache tierces.
Différences
La configuration du cache secondaire d'Hibernate est configurée en détail dans le fichier de configuration généré par sessionFactory, puis il est configuré dans la carte de table-objet spécifique.
La configuration du cache secondaire de MyBatis est configurée en détail dans chaque carte de table-objet spécifique, de sorte que différents mécanismes de cache peuvent être personnalisés pour différentes tables. Et MyBatis peut partager la même configuration et instance de cache dans l'espace de noms, qui est implémenté via Cache-Ref.
Comparaison des deux
Parce que HiberNate a un bon mécanisme de gestion pour les objets de requête, les utilisateurs n'ont pas besoin de se soucier de SQL. Par conséquent, si des données sales apparaissent lors de l'utilisation du cache secondaire, le système rapportera une erreur et une invite.
À cet égard, MyBatis nécessite des soins spéciaux lors de l'utilisation du cache L2. Si la portée des opérations de mise à jour des données ne peut pas être entièrement déterminée, évitez l'utilisation aveugle du cache. Sinon, l'apparition de données sales apportera de grands dangers cachés au fonctionnement normal du système.
Chapitre 6 Comparaison et résumé de Hibernate et Mybatis
Les similitudes entre les deux
HiberNate et MyBatis peuvent tous deux générer SessionFactory à partir du fichier de configuration XML via SessionFactoryBuider, puis générer la session à partir de sessionFactory, et enfin exécuter des transactions et des instructions SQL. Parmi eux, les cycles de vie de SessionFactoryBuider, SessionFactory et Session sont presque les mêmes.
Hibernate et MyBatis prennent tous deux des transactions JDBC et JTA.
Avantages mybatis
MyBatis peut effectuer des optimisations SQL plus détaillées et réduire les champs de requête.
Mybatis est facile à maîtriser, tandis que Hibernate a un seuil plus élevé.
Avantages d'hibernate
Le développement de la couche DAO d'Hibernate est plus simple que MyBatis, ce qui nécessite la maintenance du SQL et la cartographie des résultats.
Hibernate maintient et cache des objets mieux que MyBatis, et il est plus pratique de maintenir des objets qui sont ajoutés, supprimés, modifiés et vérifiés.
La base de données Hibernate a une bonne portabilité, la base de données MyBatis a une mauvaise portabilité et différentes bases de données doivent écrire différents SQL.
Hibernate a un meilleur mécanisme de cache L2, qui peut utiliser un cache tiers. Mybatis lui-même fournit de mauvais mécanismes de mise en cache.
Autres résumé
Hibernate a des fonctions puissantes, une bonne base de données non pertinente et de fortes capacités de cartographie O / R. Si vous êtes tout à fait compétent en hibernate et que vous encapslez correctement l'hibernate, alors l'ensemble du code de couche de persistance de votre projet sera assez simple, il y a très peu de code à écrire et la vitesse de développement est très rapide et très cool.
L'inconvénient de l'hibernate est que le seuil d'apprentissage n'est pas faible, et vous devez y être compétent. Vous devez avoir une solide expérience et une capacité à concevoir la cartographie O / R, comment équilibrer le modèle de performances et d'objets et comment utiliser bien Hibernate.
Ibatis est simple pour commencer, apprendre et utiliser, fournit une fonction de liaison automatique d'objets pour les requêtes de base de données et se poursuit avec une bonne expérience d'utilisation de SQL. Il est tout à fait parfait pour des projets qui n'ont pas de tels exigences de modèle d'objet.
L'inconvénient d'Ibatis est que le cadre est encore relativement simple et que les fonctions sont toujours manquantes. Bien que le code de liaison des données soit simplifié, l'intégralité de la requête de la base de données sous-jacente doit en fait être écrite par elle-même, la charge de travail est relativement grande et il n'est pas facile de s'adapter à la modification rapide de la base de données.