Ich habe selbst recherchiert und das Grundkonzept verstanden. Einige Einsichten können jedoch nur durch tatsächliche Erfahrung gewonnen werden.
Was sind die Vorteile von myBatis, die es lohnen, ein neues Framework zu erlernen?
In welchem Fall würden Sie es vermeiden, es zu benutzen?
orm
database-development
hibernate
Kshitiz Sharma
quelle
quelle
Antworten:
Überlegen Sie, was Sie erreichen möchten. In der Regel funktioniert das Command Query Response Segregation- Modell gut für komplexe Domänen.
Der Grund ist, dass Sie in der Regel eines von zwei Dingen versuchen:
Der Ruhezustand funktioniert gut für Fall 1, sodass Sie nur ein POJO erstellen und es beibehalten / aktualisieren können. Dies geschieht auch schnell, es sei denn, Ihre Domain ist recht groß.
myBatis eignet sich hervorragend zum Abrufen von Abfragen (Fall 2), bei denen Sie nur eine Antwort wünschen. Hibernate 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-Transformers mit umfangreichen Standardtypen wie BigDecimal an, während myBatis leicht einer einfachen POJO-Nichtentität zugeordnet werden kann.
Diese beiden Fälle unterscheiden sich zwischen Befehlen, bei denen Sie die Domänendaten ändern möchten, und Antworten, bei denen Sie nur einige Daten abrufen möchten.
Betrachten Sie also diese beiden Fälle und die Aufgaben 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 ist es, was wir für unser Projekt verwenden, das Tausende von Einheiten hat, um es unter Kontrolle zu halten. ;)
quelle
MyBatis ist SQL-zentriert. Es verhindert das Aufrufen von SQL-Anweisungen und das Zuordnen von Ergebnissen (Tabellen) zu Objektbäumen.
Der Hauptvorteil ist, dass es kein ORM ist. Es ordnet keine Tabellen einem Objekt zu und leidet daher nicht an der Fehlanpassung der Orm-Impedanz. Geeignet 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 eignet sich daher auch gut für gering qualifizierte Teams, da kein Guru im Winterschlaf erforderlich ist.
Schauen Sie sich jpetstore 6 an http://mybatis.org/spring/sample.html
quelle
Da sich die Frage auf meinen Kommentar bezieht , wollte ich ihn hier 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 veranlasste, MyBatis vorzuschlagen, ist folgender:
In einem der vergangenen Projekte hat unser Team aus den von Ihnen beschriebenen Gründen über einen Umzug aus dem Ruhezustand nachgedacht. Ähnlich wie Sie wollten wir zu JDBC wechseln, aber Kollegen aus einem anderen Projekt haben uns MyBatis empfohlen. Das Team entschied sich, es zu versuchen und JDBC als Ausweichoption beizubehalten, falls etwas schief gehen sollte.
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 befürwortet. Der Hauptgrund dafür war, dass die Menge an Code, die wir mit JDBC schreiben müssten, nach meiner bisherigen Erfahrung nur entmutigend wäre.
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 von mir einen detaillierten Überblick über die Technologie erwarten oder deren Überlegenheit loben möchten - tut mir leid, dass ich das nicht kann. Wenn ich könnte - würde ich 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 Wechsel aus dem Ruhezustand 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: 1) MyBatis hat die Probleme mit Hibernate behoben, 2) es wurden keine eigenen Probleme eingeführt, und 3) es hat uns ermöglicht, das Schreiben von Boilerplate-Code I zu vermeiden Ich habe erwartet, falls wir zu JDBC wechseln. Das ist alles.
quelle
Hibernate 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 eine davon, mein Projekt MentaBean ist eine andere. Ich habe einen Blog-Beitrag darüber geschrieben, der helfen könnte.
quelle
Ich habe Hibernate vor 5 Jahren für ein Datenlade- und Datenumwandlungsprojekt mit Hibernate 3 verwendet und fand es wunderbar. Ich mache eine kleine E-Commerce-Anwendung und habe versucht, Hibernate 4 zu verwenden. Ich war äußerst enttäuscht. Sie haben die Tools entfernt und eng in die IDE integriert. Ich habe MyBatis ausprobiert und ich arbeite alles in einer einzigen Nacht und bin sehr zufrieden damit, wie einfach es ist, sich in eine Anwendung zu integrieren. Ich denke, Hibernate ist zu aufgebläht und ich würde an dieser Stelle EJB 3 anstelle von Hibernate verwenden.
quelle