it-swarm.com.de

Was sind die Vorteile von myBatis gegenüber Hibernate?

Ich habe selbst recherchiert und das Grundkonzept verstanden. Einige Erkenntnisse können jedoch nur durch tatsächliche Erfahrung gewonnen werden.

Welche Vorteile von myBatis machen es wert, ein neues Framework zu erlernen?
In welchem ​​Fall würden Sie es vermeiden?

35
Kshitiz Sharma

Überlegen Sie, was Sie erreichen möchten. Normalerweise funktioniert das Modell Command Query Response Segregation gut für komplexe Domänen.

Der Grund ist, dass Sie normalerweise versuchen, eines von zwei Dingen zu tun:

  1. Erstellen/Aktualisieren/Löschen einiger komplexer Domänenentitäten
  2. Führen Sie analytische Abrufabfragen aus (d. H. Summations-/Aggregationsabfragen).

Hibernate funktioniert gut für Fall 1, sodass Sie einfach ein POJO erstellen und es beibehalten/aktualisieren können. Dies geschieht auch schnell, es sei denn, Ihre Domain ist ziemlich groß.

myBatis eignet sich hervorragend zum Abrufen von Abfragen (Fall 2), bei denen Sie nur eine Antwort wünschen. Der Ruhezustand würde versuchen, das gesamte Objektdiagramm zu laden, und Sie müssten Abfragen mit LazyLoading-Tricks optimieren, damit es in einer großen Domäne funktioniert. Dies ist wichtig, wenn komplexe analytische Abfragen ausgeführt werden, die nicht einmal Entitätsobjekte zurückgeben. Hibernate bietet in diesem Fall nur SqlQuery- und Bean-Transformatoren mit großen Standardtypen wie BigDecimal an, während myBatis problemlos einer einfachen POJO-Nicht-Entität zugeordnet werden kann.

Diese beiden Fälle sind der Unterschied zwischen Befehlen, wo Sie die Domänendaten ändern möchten, und Antworten, wo Sie nur einige Daten abrufen möchten.

Betrachten Sie diese beiden Fälle und die Funktionsweise Ihrer Anwendung. Wenn Sie eine einfache Domain haben und nur Informationen abrufen, verwenden Sie myBatis. Wenn Sie eine komplexe Domäne haben und Entitäten beibehalten, verwenden Sie den Ruhezustand. Wenn Sie beides tun, ziehen Sie einen hybriden Ansatz in Betracht. Das verwenden wir für unser Projekt, das Tausende von Entitäten hat, um es unter Kontrolle zu halten. ;)

39
Joseph Lust

MyBatis ist SQL-zentriert. Sie können SQL-Anweisungen aufrufen und Ergebnisse (Tabellen) Objektbäumen zuordnen.

Der Hauptvorteil ist, dass es sich nicht um ein ORM handelt. Es ordnet keine Tabellen dem Objekt zu, so dass die Orm-Impedanz-Fehlanpassung nicht auftritt. Passt gut für komplexe oder ältere Datenbanken oder zur Verwendung von Datenbankfunktionen wie gespeicherten Prozeduren, Ansichten usw.

Es ist recht einfach und leicht zu erlernen und passt daher auch gut zu Teams mit geringen Qualifikationen, da kein Guru im Winterschlaf unter ihnen sein muss.

Schauen Sie sich jpetstore 6 --- http://mybatis.org/spring/sample.html an

20
Diego

Da die Frage bezieht sich auf mein Kommentar , hatte ich vor, sie zu schreiben.

Zunächst wird es aus dem Kontext Ihrer ursprünglichen Frage abgeleitet. Unter anderen Umständen könnte ich einen anderen Rat geben. Der Punkt, der mich dazu brachte, MyBatis vorzuschlagen, ist folgender:

... wir sind auf einige Leistungsprobleme gestoßen.

Wir haben beschlossen, den Ruhezustand zugunsten von einfachem Jdbc zu beenden, um die Datenbankleistung zu verbessern ...

In einem der vergangenen Projekte hat unser Team aus den von Ihnen beschriebenen Gründen erwogen, aus dem Ruhezustand zu wechseln. Ähnlich wie Sie wollten wir zu JDBC wechseln, aber Kollegen aus einem anderen Projekt haben uns MyBatis empfohlen. Das Team hat beschlossen, es zu versuchen, während JDBC als Fallback-Option für den Fall beibehalten wird, dass etwas schief geht.

In diesem Moment wusste ich nichts über MyBatis, hatte aber genug Erfahrung mit JDBC, um sicherzugehen, dass es den Job machen wird. Trotzdem hatte ich die Idee, MyBatis auszuprobieren, nachdrücklich unterstützt. Der Hauptgrund dafür war, dass nach meiner bisherigen Erfahrung die Menge an Boilerplate-Code, die wir mit JDBC schreiben müssten, nur entmutigend wäre.

  • Um fair zu sein, ich mag JDBC, weil es einfach zu verstehen, zuverlässig und ein gutes Gefühl der Kontrolle über die Datenbankinteraktion vermittelt, aber der Preis, den man dafür zahlt, ist wirklich hoch. Meine Finger schmerzen jedes Mal, wenn ich mich erinnere, wie viel Boilerplate ich mit JDBC tippen musste.

Wie auch immer, wir haben MyBatis ausprobiert und es hat wie angekündigt funktioniert. Deshalb habe ich den Kommentar geschrieben, nach dem Sie fragen.

Falls Sie erwarten, dass ich einen detaillierten Überblick über die Technologie gebe oder ihre Überlegenheit irgendwie lobe - tut mir leid, das kann ich nicht. Wenn ich könnte - ich würde das bereits in einer separaten Antwort auf Ihre ursprüngliche Frage schreiben, anstatt einen kurzen Kommentar abzugeben. Ich erwähnte, dass ich damals nichts über MyBatis wusste - nun, ich habe immer noch ziemlich wenig Wissen darüber, sorry. Der Übergang von Hibernate wurde von anderen Teammitgliedern durchgeführt und hatte keinen Einfluss auf den Code, an dem ich gearbeitet habe. Ich erinnerte mich nur an wichtige Erkenntnisse (auf deren Grundlage ich meinen Kommentar abgegeben habe), nämlich dass 1) MyBatis die Probleme mit Hibernate gelöst hat, 2) keine eigenen Probleme eingeführt hat und 3) es uns ermöglicht hat, das Schreiben von Boilerplate-Code I zu vermeiden erwartete für den Fall, dass wir zu JDBC wechseln. Das ist alles.

5
gnat

Der Ruhezustand ist bekannt für zu viel Magie , unerwartetes Verhalten und große Lernkurve. Es gibt andere Frameworks, die sich mehr auf Einfachheit konzentrieren und Ihnen die Kontrolle geben.

myBatis ist einer von ihnen, mein Projekt MentaBean ist ein anderes. Ich habe ein Blogpost darüber geschrieben, das helfen könnte.

3