Hibernate Vs iBATIS
Pour notre nouveau produit de re-engineering, nous sommes dans le processus de sélection d'un meilleur cadre de Java. Au titre de la contrepartie est d'aller pour la base de données agnostique approche pour le modèle, nous travaillons sur des options entre les jambes de suspension + Ressort avec iBATIS ou mise en veille prolongée. S'il vous plaît conseils qui est meilleur que les deux offrent persistance.
Vous devez vous connecter pour publier un commentaire.
Ibatis et Hibernate sont très différents des bêtes.
La façon dont j'ai tendance à regarder c'est cette: mise en veille prolongée fonctionne mieux si votre vue est plus objet centrée sur. Si toutefois vous avez vue est plus base de données centrée sur puis Ibatis est un beaucoup plus forte choix.
Si vous êtes dans le contrôle complet de votre schéma et vous n'avez pas une très haute exigence de capacité de traitement puis Hibernate peut très bien fonctionner. Le modèle d'objet en fait assez pratique code, mais à un énorme coût de complexité.
Si vous avez affaire à un "héritage" schéma de base de données où vous avez besoin d'écrire assez compliqué requêtes SQL, alors les chances sont Ibatis fonctionnera mieux.
HQL (Hibernate Query Language) est une autre langue, vous aurez à apprendre, et même alors, vous aurez probablement de trouver des cas où vous encore besoin d'écrire du SQL. Qui plus est, les chances sont que vous serez certains de passer une demi-journée de trouver la bonne combinaison de XML, des propriétés, des annotations, etc pour obtenir Hibernate pour générer un performant requête SQL.
Il n'est pas universelle "A est meilleur que B" de réponse à cette question.
Pensez à ce que vous essayez d'atteindre. Généralement, le Commande de la Réponse à la Requête de la Ségrégation
le modèle fonctionne bien pour les complexes.
La raison en est que vous êtes en train de faire une de deux choses typiquement:
Hibernate fonctionne bien pour le cas 1 vous permettant de faire juste un POJO et persistent/mettre à jour. Il le fait aussi rapidement, à moins que votre domaine est assez grand.
myBatis est idéal pour chercher des requêtes (cas 2) si vous voulez juste une réponse. Hibernate serait tenter de charger la totalité de l'objet graphique et vous auriez besoin pour commencer optimisation des requêtes avec LazyLoading astuces pour garder le il travail sur un grand domaine. Inversement, si vous voulez juste quelques analytique POJO, la page de myBatis mise en œuvre de la même requête serait trivial.
De ce fait, myBatis est plus rapide que Hibernate à SÉLECTIONNE.
Ces deux cas sont les différence entre Commandes où vous souhaitez modifier les données du domaine et Réponses où vous voulez juste pour aller chercher des données.
À envisager de ces deux cas et que votre application n'. Si vous avez un domaine simple et juste aller chercher de l'information, de l'utilisation myBatis. Si vous avez un domaine complexe et persister les entités, l'utilisation d'Hibernate. Si vous faites les deux, envisager une approche hybride. C'est ce que nous utilisons sur notre projet, qui a des milliers d'entités à les garder sous contrôle. 😉
Cletus a fait un excellent travail à faire cette comparaison. Hibernate fonctionne bien lorsque vous contrôlez le modèle de données et est plus objet centrée sur tout iBATIS fonctionne bien lorsque vous avez besoin de les intégrer à une base de données existante et est plus centrée sur les données.
Aussi, je pense que Hibernate a un peu plus de courbe d'apprentissage. Avec iBATIS, il est assez facile de savoir ce qui se passe alors que plus de "magie" qui se passe avec la veille prolongée. En d'autres termes, les débutants peuvent trouver iBatis plus facile à utiliser et à comprendre.
Mais je ne dis pas que vous devriez préférer iBatis, iBatis et Hibernate sont simplement différentes comme dit ci-dessus.
Et par la manière, si vous allez pour la mise en veille prolongée, peut-être envisager l'utilisation normalisées JPA et EJB 3.0 (JSR-220) de mappage objet/relationnel annotations fournies par Hibernate Annotations.
ORM vs persistance cadre
Hibernate est objet-relation framework de mapping (ORM) qui associe les classes Java à des tables de base de données. MyBatis est la persistance cadre - pas ORM. C'cartes SQL pour les méthodes de Java.
Schéma de base de données
Hibernate peut créer ou de valider des schémas de bases de données selon votre Java modèle tout en MyBatis ne dispose pas d'une telle fonctionnalité. Aussi il est commode pour l'environnement de test est quand vous êtes en utilisant de la mémoire DB. Les discussions liées à:
Cache
Hibernate a premier niveau de cache, ce qui est impossible à désactiver. Cela signifie que si vous interrogez point par l'ORM et puis le supprimer directement avec SQL, il reste dans le cache. Vous pouvez explicitement vider le cache pour obtenir le plus de résultats mis à jour de la base de données. Les discussions liées à:
Optimiste de verrouillage de gestion
Aussi il y a des différences pour les optimistes de verrouillage de gestion:
Discussions liées à l':
Chargement paresseux
Hibernate essaie de charger la totalité de l'objet graphique à l'exception des objets qui sont marqués pour le chargement paresseux. myBatis va charger les données en fonction d'une requête SQL. Chargement différé peut améliorer les performances, mais il peut provoquer des fuites sur les conduites de si il est utilisé avec
<property name="hibernate.enable_lazy_load_no_trans" value="true" />
les propriétés. Les discussions liées à:
Session Hibernate gestion de la
Entités opérations telles que l'enregistrement, la mise à jour ou de suppression sont effectuées via Hibernate Session. Elle nécessite une bonne compréhension de la façon de mettre en œuvre correcte de la Session Hibernate gestion de la stratégie pour éviter
detached entity passed to persist
et d'autres phénomènes liés à la mise en veille prolongée.Parfois, il peut prendre plus de temps à essayer de comprendre les sous-jacents Hibernate comportement que d'en ajouter un peu plus de travail et d'écrire des premières instructions SQL pour myBatis.
En cascade
Hibernate fournit en cascade, l'orphelin, de suppression et d'autres fonctionnalités pour les graphes d'objets alors qu'ils n'est pas présent dans myBatis - de mettre en œuvre eux, vous aurez besoin d'écrire des requêtes SQL explicitement.
Requêtes
Dans myBatis vous allez écrire près de plaine de requêtes SQL. Hibernate a de multiples options de formulaire de requête: SQL, HQL, les Critères de l'API. Parfois, il peut être adapté à des Critères d'utilisation de l'API lorsque vous avez de nombreux champs optionnels dans les critères. Cela permettrait à davantage d'approche structurée de la forme de la requête et peut-être d'éviter des erreurs liées à la.
Hibernate est un ORM, sens (à son niveau de base) il cartes des instances d'objets java réelle des lignes dans une table de base de données. Généralement, pour pojo récupérée via Hibernate: toutes les manipulations et modifications de ces pojo du apparaîtra dans la base de données. Hibernate va générer et d'exécuter le SQL à un moment approprié.
Mybatis (à son niveau de base) est simplement un outil pour concevoir et exécuter SQL stockées dans des fichiers xml. Il n'a pas la carte d'instances d'objets Java de lignes dans une table de base de données, mais plutôt des cartes Java les méthodes de SQL, et il n'est donc pas un ORM. Il peut également renvoyer des pojo bien sûr, mais ils ne sont pas liés à tout type de contexte de persistance.
À la fois des outils de faire beaucoup plus que décrits ci-dessus, mais on est un ORM et l'un ne l'est pas.
Les critères pour vous permettre de choisir celui à utiliser, je crois, dépend de façon critique sur le modèle de base de données, vous avez à travailler avec.
Par exemple imaginer une grande tentaculaire schéma, représentant un certain modèle d'assurance. Les développeurs sont nécessaires pour récupérer les
de données, et d'interagir avec ces données d'une manière qui respecte l'entreprise à portée de main.
Du développeur venir sur l'aller, et ne serait jamais attendu d'avoir la condition de connaissances de l'entreprise à écrire tous
le sql à la main (ce qui Mybatis nécessiterait). Hibernate conviendrait à un scénario comme celui-ci.
Les analystes d'entreprise de définir le modèle de données, les entités, les relations et les interactions, comme l'est leur expertise.
Développeur Java alors utiliser Hibernate pour "marcher sur le modèle". Le développeur d'affaires peuvent être très productif
rapidement sans avoir à écrire compliqué sujettes à erreur sql à exécuter sur un très compliquée schéma.
Dans mon expierence, à la fois en veille prolongée et Mybatis sont régulièrement utilisés sur le même projet.
Où veille prolongée est utilisé pour
et où Mybatis est utilisé pour
si vous utilisez déjà le Printemps, je voudrais commencer avec Spring JDBC, plutôt que de plonger à droite dans Hibernate ou iBatis. Si vous écrivez votre persistance de palier en termes d'interfaces, vous ne devriez avoir aucun problème de commutation implémentations après que vous ayez obtenu Hibernate, iBatis ou sous votre ceinture.
Il n'ya aucune raison pourquoi il doit être un "tout ou rien" de la décision. Utiliser ce qui est le mieux pour votre situation.