Kapitel 1 Winterschlaf und MyBatis
Hibernate ist derzeit das beliebteste O/R -Mapping -Framework. Es wurde in SF.NET geboren und ist jetzt Teil von JBoss geworden. MyBatis ist ein weiteres hervorragendes O/R -Mapping -Framework. Gehört derzeit zu einem Unterprojekt von Apache.
MyBatis Referenzen Offizielle Website: http://www.mybatis.org/core/zh/index.html
Hibernate-Referenzmaterialien: http://docs.jboss.org/hibernate/core/3.6/reference/zh-cn/html_single/
1.1 Einführung in den Ruhezustand
Hibernate bietet eine relativ vollständige Kapselung der Datenbankstruktur. Die O/R -Zuordnung von Hibernate implementiert die Zuordnung zwischen Pojo- und Datenbanktabellen sowie automatische Erzeugung und Ausführung von SQL. Programmierer müssen häufig nur die Zuordnungsbeziehung zwischen Pojo- und Datenbanktabellen definieren und können die Vorgänge von Persistenzschicht durch die von Hibernate bereitgestellten Methoden abschließen. Programmierer müssen nicht einmal SQL beherrschen. Hibernate/OJB generiert automatisch die entsprechende SQL und ruft die JDBC -Schnittstelle auf, um sie gemäß der festgelegten Speicherlogik auszuführen.
1.2 Einführung in MyBatis
Der Fokus von Ibatis liegt auf der Kartierungsbeziehung zwischen Pojo und SQL. Durch die Zuordnung der Konfigurationsdatei werden die von SQL und die zurückgegebenen Ergebnisfelder erforderlichen Parameter dem angegebenen Pojo zugeordnet. Im Vergleich zu Hibernate "O/R" ist Ibatis eine ORM -Implementierung von "SQL Mapping".
Kapitel 2 Entwicklungsvergleich
Entwicklungsgeschwindigkeit
Die wirkliche Beherrschung von Hibernate ist schwieriger als MyBatis. MyBatis Framework ist relativ einfach und einfach zu bedienen, aber auch relativ einfach. Persönlich denke ich, dass Sie MyBatis gut verwenden müssen, Sie müssen den Winterschlaf zuerst verstehen.
Entwicklungsgemeinschaft
Hibernate und MyBatis sind beide populäre Rahmenbedingungen für Persistenzschichtentwicklungsgeräte, aber die Hibernate -Entwicklungsgemeinschaft ist relativ lebhaft, unterstützt viele Tools und Updates sind schneller. Die aktuell höchste Version ist 4.1.8. MyBatis ist relativ ruhig und hat weniger Werkzeuge, und die aktuelle höchste Version ist 3.2.
Entwicklungsarbeit
Hibernate und MyBatis haben entsprechende Tools für die Codegenerierung. Einfache und grundlegende DAO -Schichtmethoden können generiert werden.
Für fortgeschrittene Abfragen erfordert MyBatis manuelles Schreiben von SQL -Anweisungen und Ergebnismaps. Hibernate hat einen guten Mapping -Mechanismus, sodass Entwickler sich nicht um die SQL -Generation und die Ergebnis Mapping kümmern und sich mehr auf Geschäftsprozesse konzentrieren können.
Kapitel 3 Vergleich des Systemstimmungsvergleichs
Der Tuning -Plan von Hibernate entwickelt eine angemessene Strategie zur Caching;
Versuchen Sie, die faule Ladefunktion zu verwenden.
Einen angemessenen Sitzungsmanagementmechanismus annehmen;
Verwenden Sie das Batch -Grabbing und setzen Sie angemessene Batch -Parameter (batch_size);
Führen Sie ein vernünftiges O/R -Kartierungsdesign durch
MyBatis -Tuning -Lösung
MyBatis steht im Einklang mit dem Sitzungsszyklus von Hibernate in Bezug auf die Sitzung, und es ist auch ein angemessener Sitzungsmanagementmechanismus erforderlich. MyBatis hat auch einen Cache -Mechanismus Level 2. MyBatis kann ein detailliertes SQL -Optimierungsdesign durchführen.
SQL -Optimierungsaspekte
Die Abfrage von Hibernate wird alle Felder in der Tabelle abfragt, was den Leistungsverbrauch verursacht. Hibernate kann auch SQL selbst schreiben, um die Felder anzugeben, die abgefragt werden müssen, aber dies zerstört die Einfachheit der Winterschlafentwicklung. MyBatis 'SQL ist manuell geschrieben, sodass Sie nach Bedarf die Felder für die Abfrage angeben können.
Die Stimmung von Hibernate -HQL -Aussagen erfordert das Drucken von SQL, und viele Menschen mögen den SQL von Hibernat nicht, weil es zu hässlich ist. MyBatis 'SQL ist selbst manuell geschrieben, sodass es einfach ist, sich anzupassen. Aber Hibernate hat seine eigene Protokollstatistik. MyBatis selbst enthält keine Protokollstatistiken und verwendet Log4J zur Protokollierung.
Skalierbarkeit
Der Zusammenhang zwischen Winterschlaf- und spezifischen Datenbanken muss nur in der XML -Datei konfiguriert werden. Alle HQL -Anweisungen haben nichts mit der spezifischen verwendeten Datenbank zu tun und sind sehr tragbar. Alle SQL -Anweisungen im MyBatis -Projekt hängen von der verwendeten Datenbank ab, sodass die Unterstützung für verschiedene Datenbanktypen nicht gut ist.
Kapitel 4 Objektmanagement- und Kriechstrategien
Objektverwaltung
Hibernate ist eine vollständige Lösung für Objekt-/Relationskarte, die die Funktionalität des Objektstatusmanagements liefert, sodass Entwickler nicht mehr auf die Details des zugrunde liegenden Datenbanksystems achten müssen. Das heißt, im Vergleich zu den gemeinsamen Szenarien für JDBC/SQL Persistenzschicht, die die Verwaltung von SQL-Anweisungen erfordern, nimmt der Winterschlaf eine natürlichere objektorientierte Perspektive an, um Daten in Java-Anwendungen zu bestehen.
Mit anderen Worten, Entwickler, die Hiberate verwenden, sollten immer auf den Zustand des Objekts achten und müssen die Ausführung von SQL -Anweisungen nicht berücksichtigen. Dieser Teil der Details wurde von Hibernate verwaltet und nur Entwickler müssen verstehen, wenn sie die Systemleistung abstellen.
MyBatis hat in diesem Bereich keine Dokumentation, daher müssen Benutzer die Objekte selbst im Detail verwalten.
Kriechstrategie
Hibernate hat einen guten Mechanismus für kriechende Entitätsobjekte. Für jede Assoziationsbeziehung kann es detailliert eingestellt werden, ob das Laden verzögert wird, und vier Modi werden zur Verfügung gestellt: Assoziationskriechen, Abfragekriechen, Unterabfrage -Kriechen und Batch -Crawling. Es ist ausführlich konfiguriert und verarbeitet.
MyBatis 'faules Laden wird weltweit konfiguriert.
Kapitel 5 Vergleich der Cache -Mechanismen
Winterschlafcache
Hibernate Level 1 Cache ist ein Sitzungscache. Wenn Sie den Cache Level 1 gut nutzen, müssen Sie den Lebenszyklus der Sitzung gut verwalten. Es wird empfohlen, eine Sitzung in einem Aktionsvorgang zu verwenden. Der Cache von Level 1 erfordert eine strenge Sitzungsverwaltung der Sitzung.
Hibernate Level 2 Cache ist ein Cache auf SessionFactory-Level. Der Cache von SessionFactory ist in einen integrierten Cache und externer Cache unterteilt. Der integrierte Cache speichert Daten, die in einigen Sammlungsattributen des SessionFactory-Objekts (Zuordnungselementdaten und vorgegebene SQL-Anweisungen usw.) enthalten sind, die für Anwendungen nur schreibgeschützt sind. Der externe Cache speichert eine Kopie der Datenbankdaten, die dem primären Cache ähnelt. Zusätzlich zur Verwendung des Speichers als Speichermedium kann der sekundäre Cache auch externe Speichergeräte wie Festplatten verwenden. Der sekundäre Cache wird als Cache auf Prozessebene oder SessionFactory-Ebene bezeichnet. Es kann von allen Sitzungen geteilt werden, und sein Lebenszyklus existiert und verschwindet mit dem Lebenszyklus der Sitzung.
MyBatis Cache
MyBatis enthält eine sehr leistungsstarke Funktion für Abfrage -Cache, die sehr einfach konfiguriert und angepasst werden kann. Viele Verbesserungen der Cache -Implementierung in MyBatis 3 wurden implementiert, was es leistungsfähiger und einfacher zu konfigurieren hat.
Standardmäßig ist das Caching nicht aktiviert. Zusätzlich zum lokalen Sitzungs -Cache kann es die Monetarisierung verbessern und kreisförmige Abhängigkeiten verarbeiten, die auch erforderlich sind. Um Level 2 Cache zu aktivieren, müssen Sie Ihrer SQL -Zuordnungsdatei eine Zeile hinzufügen: <Cache/>
Das war es buchstäblich. Der Effekt dieser einfachen Aussage ist wie folgt:
Alle Auswahlanweisungen in der Zuordnungsanweisungsdatei werden zwischengespeichert.
Alle Einfügen, Aktualisieren und Löschen von Anweisungen in der Mapping -Anweisungsdatei aktualisieren den Cache.
Der Cache wird mit dem am wenigsten verwendeten (LRU, dem am wenigsten verwendeten) Algorithmus abgerufen.
Abhängig vom Zeitplan (z. B. kein Flush -Intervall, kein Aktualisierungsintervall) wird der Cache in einer chronologischen Reihenfolge nicht aktualisiert.
Der Cache speichert 1024 Verweise auf eine Listensammlung oder ein Objekt (unabhängig davon, was die Abfragemethode zurückgibt).
Der Cache gilt als ein Lese-/Schreib- (lesbar/beschreibbarer) Cache, was bedeutet, dass das Abrufen von Objekten nicht gemeinsam genutzt wird und vom Anrufer sicher geändert werden kann, ohne potenzielle Änderungen zu stören, die von anderen Anrufern oder Threads vorgenommen werden.
Alle diese Eigenschaften können durch die Eigenschaften von Cache -Elementen geändert werden.
Zum Beispiel: <cache eviction = "fifo" FlushInterval = "60000" size = "512" readonly = "true"/>
Diese fortgeschrittenere Konfiguration erstellt einen FIFO-Cache und aktualisiert alle 60 Sekunden, wobei 512 Verweise auf das Ergebnisobjekt oder die Ergebnisliste gespeichert werden. Das zurückgegebene Objekt wird als schreibgeschützt betrachtet. Die Änderung zwischen Anrufern in verschiedenen Threads führt daher zu Konflikten. Die verfügbaren Wiederherstellungsstrategien sind, der Standard ist LRU:
LRU SELDEKTE VERWENDET: Objekte entfernen, die für die längste Zeit nicht verwendet wurden.
FIFO First-in-First-Out: Entfernen Sie Objekte in der Reihenfolge, in der sie den Cache eingeben.
Weiche weiche Referenz: Entfernt Objekte basierend auf dem Müllsammlerstatus und weicher Referenzregeln.
Schwache schwache Referenzen: Entfernen aggressiver Objekte basierend auf dem Zustand des Müllsammlers und schwachen Referenzregeln.
FlushInterval kann auf jede positive Ganzzahl eingestellt werden und stellen eine angemessene Millisekundenform des Zeitraums dar. Die Standardeinstellung ist nicht festgelegt, dh es gibt kein Aktualisierungsintervall, und der Cache wird nur dann aktualisiert, wenn die Anweisung aufgerufen wird.
Größe (Anzahl der Referenzen) kann auf jede positive Ganzzahl eingestellt werden. Denken Sie an die Anzahl der von Ihnen zwischengestrichenen Objekte und die Anzahl der verfügbaren Speicherressourcen in Ihrer laufenden Umgebung. Der Standardwert ist 1024.
Die Readonly -Eigenschaft kann auf True oder False festgelegt werden. Ein schreibgeschützter Cache gibt alle Anrufer dieselbe Instanz des Cache-Objekts zurück. Daher können diese Objekte nicht geändert werden. Dies bietet wichtige Leistungsvorteile. Ein lesbarer und schriftlicher Cache gibt eine Kopie des Cache -Objekts zurück (durch Serialisierung). Dies wird langsamer, aber sicher sein, daher ist es standardmäßig falsch.
Ähnlichkeiten
Neben dem Standard-Caching-Mechanismus des Systems können auch Hibernate und MyBatis 'sekundäre Caches das Cache-Verhalten vollständig überschreiben, indem Sie Ihren eigenen Cache implementieren oder Adapter für andere Cache-Lösungen von Drittanbietern erstellen.
Unterschiede
Die Sekundär-Cache-Konfiguration von Hibernate wird in der von SessionFactory generierten Konfigurationsdatei ausführlich konfiguriert und dann in der spezifischen Tabellen-Objekt-Karte konfiguriert.
Die sekundäre Cache-Konfiguration von MyBatis ist in jeder spezifischen Tabellen-Objekt-Karte ausführlich konfiguriert, sodass verschiedene Cache-Mechanismen für verschiedene Tabellen angepasst werden können. Und MyBatis kann die gleiche Cache-Konfiguration und -instanz im Namespace teilen, der über Cache-Ref implementiert wird.
Vergleich der beiden
Da Hibernate einen guten Verwaltungsmechanismus für Abfragebobjekte hat, müssen sich Benutzer nicht um SQL kümmern. Wenn bei der Verwendung des sekundären Cache schmutzige Daten angezeigt werden, meldet das System daher einen Fehler und eine Aufforderung.
In dieser Hinsicht benötigt MyBatis bei der Verwendung von L2 -Cache besondere Sorgfalt. Wenn der Umfang der Datenaktualisierungsvorgänge nicht vollständig ermittelt werden kann, vermeiden Sie den blinden Gebrauch von Cache. Andernfalls bringt das Erscheinen schmutziger Daten den normalen Betrieb des Systems große versteckte Gefahren.
Kapitel 6 Vergleich und Zusammenfassung von Hibernate und MyBatis
Die Ähnlichkeiten zwischen den beiden
Hibernate und MyBatis können sowohl SessionFactory aus der XML -Konfigurationsdatei über SessionFactoryBuder generieren, anschließend eine Sitzung aus SessionFactory generieren und schließlich Transaktionen und SQL -Anweisungen ausführen. Unter ihnen sind die Lebenszyklen von SessionFactoryBuder, SessionFactory und Session fast gleich.
Sowohl Winterschlaf- als auch MyBatis unterstützen JDBC- und JTA -Transaktionen.
MyBatis Vorteile
MyBatis kann detailliertere SQL -Optimierungen durchführen und Abfragefelder reduzieren.
MyBatis ist leicht zu meistern, während Hibernate eine höhere Schwelle hat.
Winterschlafvorteile
Die DAO -Schichtentwicklung von Hibernate ist einfacher als MyBatis, was die Aufrechterhaltung von SQL und Ergebnis Mapping erfordert.
Der Hibernate unterhält und zwischengespeichert Objekte besser als MyBatis, und es ist bequemer, Objekte zu pflegen, die hinzugefügt, gelöscht, geändert und überprüft werden.
Die Hibernate -Datenbank hat eine gute Portabilität, die MyBatis -Datenbank hat eine schlechte Portabilität und verschiedene Datenbanken müssen verschiedene SQL schreiben.
Hibernate hat einen besseren L2-Cache-Mechanismus, der Cache von Drittanbietern verwenden kann. MyBatis selbst bietet schlechte Caching -Mechanismen.
Andere Zusammenfassung
Hibernate hat leistungsstarke Funktionen, gute Datenbank -Irrelevanz und starke O/R -Kartierungsfunktionen. Wenn Sie einen Hibernate ziemlich gut beherrschen und den Winterschlaf ordnungsgemäß zusammenfassen, ist der gesamte Code für Persistenzschicht Ihres Projekts recht einfach, es gibt nur sehr wenig Code zum Schreiben und die Entwicklungsgeschwindigkeit ist sehr schnell und sehr cool.
Der Nachteil von Hibernate ist, dass die Lernschwelle nicht niedrig ist und dass Sie es beherrschen müssen. Sie müssen über eine starke Erfahrung und die Fähigkeit verfügen, O/R -Mapping zu entwerfen, das Leistungs- und Objektmodell auszugleichen und Hibernate gut zu verwenden.
Ibatis ist einfach zu beginnen, zu lernen, zu lernen und zu verwenden, bietet automatische Objektbindungsfunktionen für Datenbankabfragen und setzt mit guter SQL -Nutzungserfahrung fort. Es ist sehr perfekt für Projekte, die keine so hohen Objektmodellanforderungen haben.
Der Nachteil von Ibatis ist, dass das Rahmen noch relativ einfach ist und die Funktionen noch fehlen. Obwohl der Datenbindungscode vereinfacht ist, muss die gesamte zugrunde liegende Datenbankabfrage tatsächlich selbst geschrieben werden, die Workload ist relativ groß und es ist nicht einfach, sich an die Änderung der schnellen Datenbank anzupassen.