MyBatis enthält eine sehr leistungsstarke Funktion für Abfrage -Cache, die sehr einfach konfiguriert und angepasst werden kann. Standardmäßig ist Cache nicht aktiviert. 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:
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. Nach dem Zeitplan (wie kein Flush -Intervall, kein Aktualisierungsintervall) wird der Cache in keiner chronologischen Reihenfolge aktualisiert.
5. Der Cache speichert 1024 Verweise auf eine Listensammlung oder ein Objekt (unabhängig davon, was die Abfragemethode zurückgibt).
6. Der Cache wird als Lese-/Schreib- (lesbar/beschreibbarer) Cache angesehen, 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" fluschInterval = "60000" size = "512" readonly = "true"/>
Diese fortgeschrittenere Konfiguration erstellt einen FIFO-Cache und aktualisiert alle 60 Sekunden, wobei 512 Referenzen auf das Ergebnisobjekt oder die Ergebnisliste gespeichert werden, und das zurückgegebene Objekt wird als schreibgeschützt betrachtet, sodass diese zwischen Anrufern in verschiedenen Threads in Konflikten geändert werden.
Die verfügbaren Abrufstrategien sind:
Der Standard ist LRU.
FlushInterval kann auf jede positive Ganzzahl eingestellt werden und stellen einen angemessenen Zeitraum von Millisekunden 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, wobei die Anzahl der von Ihnen zwischengestrahlten Objekte und die Anzahl der verfügbaren Speicherressourcen in Ihrer laufenden Umgebung erinnert werden kann. 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.
Verwenden von benutzerdefiniertem Cache
Zusätzlich zu diesen benutzerdefinierten Cache-Methoden können Sie das Cache-Verhalten vollständig überschreiben, indem Sie Ihren eigenen Cache implementieren oder Adapter für andere Cache-Szenarien von Drittanbietern erstellen.
<cache type = ”com.domain.Something.mycustomcache”/>
Dieses Beispiel zeigt, wie eine benutzerdefinierte Cache -Implementierung verwendet wird. Die vom Typ Attribut angegebene Klasse muss die Schnittstelle org.mybatis.cache.cache implementieren. Diese Schnittstelle ist eine von vielen komplexen Schnittstellen im MyBatis -Framework, aber es ist in Ordnung, ihm einfach das zu geben, was es tut.
public interface cache {string getId (); Int GetSize (); void putObject (Objektschlüssel, Objektwert); Objekt getObject (Objektschlüssel); Boolean Haskey (Objektschlüssel); Object RemectObject (Objektschlüssel); void clear (); ReadWriteLock getReadWriteLock (); } Referenzcache
Vielleicht möchten Sie in Zukunft irgendwann die gleiche Cache -Konfiguration und -instanzen im Namespace teilen. In diesem Fall können Sie das Cache-Ref-Element verwenden, um einen anderen Cache zu verweisen.
<cache-ref namespace = ”com.someone.application.data.somemapper”/>