java - 关于mybatis和hibernate的困惑
巴扎黑
巴扎黑 2017-04-18 09:32:16
0
19
1612
  • 由于java视频里以前好多都是SSH。但是在实际工作中没见过用hibernate的,基本都用mybatis。

  • 我有一些疑问:

    • hibernate碰到什么样的业务会变成致命的弱点,都说hibernate效率低,能否举个例子(例如同一个查询用mybatis查询耗时1秒,用hibernate查询耗时10秒)

    • 可能是有部分人遇到了hibernate的瓶颈,但是这部分人的业务量我觉得,不是大部分使用hibernate的人都能遇到的。一般的小项目,不超过100个用户,这样的项目综合考虑的话更适合用mybatis还是hibernate?主要从开发效率上来说的话。为什么?

谢谢

巴扎黑
巴扎黑

répondre à tous(19)
巴扎黑

Il y a des questions similaires sur Zhihu.
La réponse que j'ai vue avec les votes élevés est que hibernate est plus difficile à maîtriser que mybatis, et le contrôle de SQL est plus faible.

黄舟

L'écriture de mb sql en XML nécessite également une analyse, et l'efficacité n'est pas beaucoup plus élevée

PHPzhong

Comparez la relation entre les deux et donnez des considérations sous trois aspects : l'efficacité du développement, la maintenabilité et les performances. En termes d'importance, dans le processus de développement de l'ingénierie de projet, efficacité du développement > maintenabilité > performance. Peut-être que pour certaines entreprises, la performance est plus critique, mais en regardant la situation globale, je pense personnellement que l'efficacité du développement > la maintenabilité > la performance.

Tout d’abord, l’efficacité du développement. Personnellement, je pense que si vous réalisez des projets simples de type CMS avec seulement des ajouts, suppressions, modifications et requêtes simples, alors utiliser Hibernate est plus avantageux. Vous n'avez pas besoin de maîtriser trop de connaissances sur Hibernate, il vous suffit d'en connaître quelques-unes. requêtes de base et certaines configurations (Hibernate est vraiment pour apprendre, je pense personnellement que la quantité de connaissances est bien supérieure à celle de mybatis). hiberbate utilise des objets Java pour écrire du SQL, tandis que mybatis écrit directement du SQL natif. Hibernate fournit un bon mécanisme de mappage, et mybatis doit également écrire lui-même resultmap paramMap. Hibernate et MyBatis disposent tous deux d'outils de génération de code correspondants. Des méthodes de couche DAO simples et basiques peuvent être générées. Pour les requêtes avancées, Mybatis nécessite l'écriture manuelle des instructions SQL et ResultMap. Hibernate dispose d'un bon mécanisme de mappage. Les développeurs n'ont pas besoin de se soucier de la génération SQL et du mappage des résultats et peuvent se concentrer davantage sur les processus métier. Pour résumer, du point de vue de l'efficacité du développement, Hibernate>

Maintenabilité : hiberbate utilise des objets Java pour écrire du SQL, tandis que mybatis écrit directement du SQL natif. L'écriture directe de SQL est plus facile à maintenir, mais la première nécessite de visualiser SQL via des objets Java. Vous devez imprimer le SQL à l'aide de System.out.println(sql) avant de pouvoir le voir. La requête d'Hibernate interrogera tous les champs de la table, ce qui consommera des performances. Hibernate peut également écrire son propre code SQL pour spécifier les champs qui doivent être interrogés, mais cela détruit la simplicité du développement d'Hibernate. Le SQL de Mybatis est écrit manuellement, les champs de requête peuvent donc être spécifiés selon les besoins. Le réglage des instructions Hibernate HQL nécessite l'impression du SQL, et le SQL d'Hibernate n'est pas apprécié par de nombreuses personnes car il est trop laid. Le SQL de MyBatis est écrit manuellement par moi-même, il est donc facile à ajuster. Mais Hibernate possède ses propres statistiques de journal. Mybatis lui-même ne dispose pas de statistiques de journalisation et utilise Log4j pour la journalisation.

Performances : les deux fournissent des mécanismes de mise en cache et de session. Les petits projets sont presque les mêmes. Les grands projets mybatis>hibernate.

黄舟

En regardant les discussions de tout le monde, j'ai l'impression que mybaits est meilleur, mais j'ai toujours pensé qu'hiberner était plus adapté au développement à grande échelle, alors je suis allé directement en hibernation. A cette époque, le projet était relativement urgent et je l'ai utilisé comme mybatis. Plus tard, après avoir joué pendant longtemps, j'ai découvert beaucoup de choses intéressantes. L'expérience offerte par hibernate simplifiait beaucoup de charge de travail et de compatibilité, mais celles-ci nécessitaient certainement. expérience pour comprendre, et plus tard Il est utile d'utiliser la recherche en veille prolongée et la recherche en texte intégral, il n'y a donc aucun moyen de le changer. De toute façon, vous pouvez écrire du SQL ou du hql natif. Il existe également des outils de configuration XML, et les annotations auxiliaires sont. également flexible. Il peut même générer des structures de données one2many et many2many qui sont différentes du SQL natif, en bref, c'est un gars très complet. Si vous ne l'avez pas encore regretté, continuez à apprendre. Généralement, les outils de mise en veille prolongée sont utilisés pour créer automatiquement les mappages Java et XML de toutes les tables afin d'effectuer des recherches générales, des suppressions et des modifications, puis copier le code Java et le renommer, utiliser des annotations pour créer manuellement des associations et supprimer les champs inutiles.

Ty80

1. Question 1 : Dans quelles circonstances Hibernate sera-t-il 10 fois plus lent que MyBatis ?

Lorsque Hibernate est utilisé de manière incorrecte, quelque chose se produit : P
Par exemple, si le chargement de l'objet intégré B dans l'objet A d'Hibernate passe du chargement paresseux par défaut au préchargement (en supposant que vous ne compreniez pas l'impact, Je viens de changer la configuration), si vous souhaitez interroger la liste de l'objet A, il y aura une requête N+1, mais la plupart de votre logique métier n'a pas besoin de lire l'objet embarqué B et les performances seront très mauvaises.
Et généralement dans le cas de MyBatis, ce type de requête doit être écrit à la main. La probabilité que cela se produise est faible.

JPA (Hibernate) couvre un très large éventail de contenus et propose de nombreuses techniques d'optimisation. Il faut beaucoup d'argent pour se familiariser avec celui-ci (le livre Hibernate In Action que j'ai est très épais et intimidant. m'a fallu beaucoup de temps pour le lire. Après l'avoir lu), je ne sais pas combien de programmeurs aiment lire et ont la patience.

Cependant, MyBatis est beaucoup plus facile à démarrer. Bien que les performances de MyBatis soient bien pires que celles d'Hibernate s'il est utilisé incorrectement, MyBatis n'est pas si compliqué, donc le risque de faire des erreurs est beaucoup plus faible.

2. Question 2 : Dois-je utiliser MyBatis ou Hibernate pour les petits projets

Si vous êtes très intéressé par Hibernate et que vous souhaitez vous familiariser avec lui, je vous suggère de l'essayer. Après tout, la plupart des projets doivent produire des résultats rapidement
Hibernate est plus simple que MyBatis à cet égard. bien d'autres (bien sûr, MyBatis a un moyen de générer automatiquement du code, mais c'est quand même beaucoup plus gênant).
Si le projet ultérieur se développe bien et nécessite la collaboration de plusieurs personnes au développement, veillez à éloigner les novices du logique de code de couche de persistance.

黄舟

Pour faire simple, Hibernate est orienté objet et MyBatis est orienté SQL. Le choix que vous choisirez dépend de celui que votre personnel connaît, du fait que votre entreprise aura de nombreuses requêtes complexes et si elle a des exigences de performances élevées. De plus, il arrive souvent que les gens ne soient pas familiers avec Hibernate, ils ont donc l'impression qu'Hibernate ne peut pas faire cela, ou que c'est très compliqué à faire. Hibernate a dit que je n'assumerais pas cette responsabilité. . .

迷茫

Personnellement, je pense aussi qu'hibernate est facile à utiliser. Il crée automatiquement des tables. Le problème de performances est lié aux requêtes.

PHPzhong

Maintenant, nous utilisons des clés étrangères logiques pendant le développement sans association de tables, donc l'efficacité du développement est presque la même. Mybatis est simple et clair, SQL est plus polyvalent et la collaboration est légèrement plus pratique.

巴扎黑

La technologie n'est ni bonne ni mauvaise, seulement si elle est adaptée ou non, et peut résoudre des problèmes spécifiques dans des circonstances spécifiques. Différentes personnes utilisant la mise en veille prolongée produiront des résultats différents. Si vous maîtrisez la mise en veille prolongée, les performances ne sont pas un problème. J’ai vu tellement de comparaisons entre les deux mentionnés ci-dessus, mais elles n’ont vraiment pas beaucoup de sens.

左手右手慢动作

En général, la mise en veille prolongée n'est pas assez flexible et l'encapsulation est trop profonde. Mybatis peut configurer les opérations souhaitées comme vous le souhaitez

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal