1. Einführung in MyBatis Cache
Wie die meisten Persistenzschicht -Frameworks bietet MyBatis auch L1- und L2 -Caches.
1. Cache Level 1:
Der auf Perpetualcache basierende HashMap -Cache verfügt über einen Speicherbereich der Sitzung. Nach der Sitzung oder Schließen werden alle Caches in der Sitzung gelöscht.
2. Cache Level 2:
Der Cache der zweiten Stufe entspricht dem Cache der ersten Stufe, und der Standardwert ist ewigcache und Hashmap-Speicher. Der Unterschied besteht darin, dass sein Speicherbereich Mapper (Namespace) ist und die Speicherquelle wie EHCache anpassen kann.
3. Für den Cache-Daten-Update-Mechanismus werden alle Caches in Select unter diesem Bereich standardmäßig gelöscht, wenn ein bestimmter Bereich (Cache-Cache-Session/zweite Cache-Namespaces der ersten Ebene).
1.1. MyBatis Level 1 Cache -Test
Paket me.gacl.test; import me.gacl.domain.user; import me.gacl.util.mybatisutil; import org.apache.ibatis.Session Standardmäßig)*/@testPublic void testcache () {SQLSession Session = mybatisutil.getSQLSession (); String Anweisung = "me.gaCl.mapping Session.Selectone (Anweisung,); System.out.println (Benutzer); Sitzung.CLOSE ();/*. Es muss die gleiche Sitzung sein. Wenn das Sitzungsobjekt geschlossen wurde (), ist es unmöglich, es zu verwenden. Die Abfragebedingungen sind gleich */user = session.selectone (Anweisung,); System.out.println (Benutzer);/ *. No session.clearcache () wurde ausgeführt, um den Cache zu reinigen*/// Session.clearcache (); user = session.selectone (Anweisung,); System.out.println (Benutzer);/*. Es wurden keine ADD/Löschen -Vorgänge ausgeführt (diese Operationen werden den Cache reinigen)*/session.update ("me.gacl.mapping.usMapper.Updateuser", neuer Benutzer (, "Benutzer",)); user = session.Selectone (Anweisung); 1.2. MyBatis Level 2 Cache -Test
1. Schalten Sie den sekundären Cache ein und fügen Sie die folgende Konfiguration zur Datei UsMapper.xml hinzu
<Mapper Namespace = "me.gacl.mapping.usmapper"> <!-Einschalten Level 2 Cache-> <cache/>
2. Testen Sie den sekundären Cache
Paket me.gacl.test; import me.gacl.domain.user; import me.gacl.util.mybatisutil; import org.apache.ibatis.Session TesttWolevelCache {/** Teststufe 2 Cache* Verwenden Sie zwei verschiedene SQLSession -Objekte, um Abfragen mit denselben Abfragebedingungen auszuführen. SQL -Anweisungen werden während der zweiten Abfrage nicht gesendet, aber Daten werden direkt aus dem Cache*/@testpublic void testcache () {String Statement = "me.gacl.mapping factory.opensession (); System.out.println ("user ="+user); // Da zwei verschiedene SQLSession -Objekte verwendet werden, auch wenn die Abfragebedingungen gleich sind, wird der Cache der ersten Ebene nicht aktiviert. user = session.selectone (Anweisung,); // session.commit (); System.out.println ("user ="+user);}} 1.3. Zusätzliche Anweisungen für den sekundären Cache
1. Alle Auswahlanweisungen in der Mapping -Anweisungsdatei werden zwischengespeichert.
2. Nachdem Sie alle Anweisungen in der Anweisungsdatei einfügen, aktualisieren und löschen, aktualisieren Sie den Cache.
3. Der Cache wird unter Verwendung des am wenigsten verwendeten (LRU, am wenigsten verwendeten) Algorithmus wiedergegeben.
4. Der Cache wird nach dem angegebenen Zeitintervall aktualisiert.
5. Der Cache speichert 1024 Objekte
Häufige Eigenschaften von Cache -Tags:
<cache eviction = "fifo" <!-Recycling-Strategie ist erstmals, erster Out-> Flushinterval = "60000" <!
Ich werde Ihnen etwas Wissen geben:
Wie Hibernate hat MyBatis auch einen Cache -Mechanismus
Level -1 -Cache basiert auf dem lokalen Cache von Perpetualcache (MyBatis kommt mit dem HashMap -Cache). Der Umfang ist die Sitzung. Wenn also der Sitzungsbekenntnis oder der Schließen der Cache gelöscht wird.
Der Cache der zweiten Ebene basiert standardmäßig auch auf Perpetualcache, kann jedoch zum Erstellen von Speicherquellen wie EHCache verwendet werden.
Die SQL-Anweisungen der ersten Stufe zwischen den SQL-Anweisungen der ersten Ebene, während das Cache der zweiten Ebene das Ergebnisobjekt zwischengespeichert. Siehe das folgende Beispiel (MyBatis 'Protokollebene ist auf Debugg festgelegt)