Wir wissen, dass häufige Datenbankoperationen sehr leistungsintensiv sind (hauptsächlich, weil bei DB die Daten dauerhaft gespeichert werden Festplatte, sodass die Abfrageoperation über E/A erfolgen muss und die E/A-Operationsgeschwindigkeit um mehrere Größenordnungen langsamer ist als die Speicheroperationsgeschwindigkeit. Insbesondere bei einigen identischen Abfrageanweisungen können die Abfrageergebnisse gespeichert werden, und die nächste Abfrage wird gespeichert Dasselbe Beim Abfragen des Inhalts können Sie die Daten direkt aus dem Speicher abrufen, was in bestimmten Szenarien die Abfrageeffizienz erheblich verbessern kann.
Der Cache von MyBatis ist in zwei Typen unterteilt:
Cache der ersten Ebene, der Cache der ersten Ebene ist SqlSession-Ebene Cache, für dieselbe Abfrage werden die Ergebnisse aus dem Cache zurückgegeben, anstatt die Datenbank abzufragen
Second-Level-Cache: Der Second-Level-Cache ist ein Mapper-Level -Cache, der im -Tag definiert ist und Multiple Mapper aktiviert werden muss Dateien können sich je nach -Tag-Konfiguration einen Cache teilen.
MyBatis First-Level-Cache-Workflow
Dann werfen Sie zunächst einen Blick auf MyBatis -Level-Cache-Arbeitsprozess. Wie bereits erwähnt, ist der Cache der ersten Ebene von MyBatis ein Cache der SqlSession-Ebene. Wenn die openSession()-Methode abgeschlossen ist oder die Close-Methode von SqlSession aktiv aufgerufen wird, wird die SqlSession recycelt, und der Cache der ersten Ebene wird ebenfalls recycelt zur gleichen Zeit. Wie im vorherigen Artikel erwähnt, werden in MyBatis sowohl die selectOne- als auch die selectList-Methode schließlich zur Ausführung in die selectList-Methode konvertiert. Schauen Sie sich also die Implementierung der selectList-Methode von SqlSession an:
Verfolgen Sie weiterhin den Code in Zeile 4 auf die Abfragemethode von BaseExeccutor:
Zeile 3 erstellt die Cache-Bedingung CacheKey What Handelt es sich hier um die gleiche Bedingung wie bei der vorherigen Abfrage, da dieselbe Bedingung das vorherige Ergebnis zurückgeben kann. Dieser Teil des Codes wird im nächsten Teil analysiert.
1 public int update(MappedStatement ms, Object parameter) throws SQLException {2 ErrorContext.instance().resource(ms.getResource()).activity("executing an update").object(ms.getId());3 if (closed) {4 throw new ExecutorException("Executor was closed.");5 }6 clearLocalCache();7 return doUpdate(ms, parameter);8 }
1 public class CacheKey implements Cloneable, Serializable { 2 3 private static final long serialVersionUID = 1146682552656046210L; 4 5 public static final CacheKey NULL_CACHE_KEY = new NullCacheKey(); 6 7 private static final int DEFAULT_MULTIPLYER = 37; 8 private static final int DEFAULT_HASHCODE = 17; 9 10 private int multiplier;11 private int hashcode;12 private long checksum;13 private int count;14 private List<Object> updateList;15 ...16 }
select a.col1, a.col2, a.col3, b.col1, b.col2, b.col3 from tableA a, tableB b where a.id = b.id;
Nach dem Login kopieren
Die Operationen für TabelleA und TabelleB sind in zwei Mappern namens MapperA bzw. MapperB definiert, das heißt, sie gehören zu zwei Namespaces, wenn das Caching zu diesem Zeitpunkt aktiviert ist:
Führen Sie die obige SQL-Anweisung in MapperA aus, um diese 6 Felder abzufragen
tableB hat die beiden Felder col1 und col2 aktualisiert
MapperA führt die obige SQL-Anweisung erneut aus, um diese 6 Felder abzufragen (bereitgestellt). es wird nicht nach Einfüge-, Lösch- oder Aktualisierungsvorgängen ausgeführt)
Das Problem tritt zu diesem Zeitpunkt auf, auch wenn TabelleB Spalte1 in aktualisiert Schritt (2) Mit den beiden Feldern von col2 sind in Schritt (3) die 6 Felder, die MapperA über den Cache der zweiten Ebene erhält, immer noch die Werte des Originals 6 Felder, weil wir die Werte aus dem CacheKey erhalten. Basierend auf den drei Sätzen von Bedingungen:
Der Namespace des Mapper, wo sich die Beschriftung befindet+Das ID-Attribut der Beschriftung
Die Offset- und Limit-Attribute von RowBounds sind eine von MyBatis verwendete Klasse um Paging zu verarbeiten. Der Offset ist standardmäßig 0 und der Grenzwert ist standardmäßig Integer.MAX_VALUE
Für MapperA, eine der Bedingungen Wenn keine Änderung erfolgt, wird natürlich das ursprüngliche Ergebnis zurückgegeben.
Dieses Problem ist ein unlösbares Problem für den Second-Level-Cache von MyBatis. Daher gibt es eine Voraussetzung für die Verwendung des Second-Level-Cache von MyBatis: Es muss sichergestellt werden, dass alle Erhöhungen gelöscht werden , ändern und überprüfen Sie alles im selben Namespace .
Das obige ist der detaillierte Inhalt von[MyBatis-Quellcode-Analyse] MyBatis-Cache der ersten und zweiten Ebene. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Interpretation der dynamischen SQL-Tags von MyBatis: Detaillierte Erläuterung der Verwendung von Set-Tags. MyBatis ist ein hervorragendes Persistenzschicht-Framework. Es bietet eine Fülle dynamischer SQL-Tags und kann Datenbankoperationsanweisungen flexibel erstellen. Unter anderem wird das Set-Tag zum Generieren der SET-Klausel in der UPDATE-Anweisung verwendet, die sehr häufig bei Aktualisierungsvorgängen verwendet wird. In diesem Artikel wird die Verwendung des Set-Tags in MyBatis ausführlich erläutert und seine Funktionalität anhand spezifischer Codebeispiele demonstriert. Was ist Set-Tag? Set-Tag wird in MyBati verwendet
Ausführliche Erklärung des Oracle-Fehlers 3114: Um ihn schnell zu beheben, sind spezifische Codebeispiele erforderlich. Bei der Entwicklung und Verwaltung von Oracle-Datenbanken stoßen wir häufig auf verschiedene Fehler, unter denen Fehler 3114 ein relativ häufiges Problem ist. Fehler 3114 weist normalerweise auf ein Problem mit der Datenbankverbindung hin, das durch einen Netzwerkfehler, einen Stopp des Datenbankdienstes oder falsche Einstellungen der Verbindungszeichenfolge verursacht werden kann. In diesem Artikel wird die Ursache des Fehlers 3114 ausführlich erläutert und wie dieses Problem schnell gelöst werden kann. Außerdem wird der spezifische Code angehängt
Analyse des MyBatis-Caching-Mechanismus: Der Unterschied und die Anwendung von First-Level-Cache und Second-Level-Cache Im MyBatis-Framework ist Caching eine sehr wichtige Funktion, die die Leistung von Datenbankoperationen effektiv verbessern kann. Unter diesen sind der First-Level-Cache und der Second-Level-Cache zwei häufig verwendete Caching-Mechanismen in MyBatis. In diesem Artikel werden die Unterschiede und Anwendungen von First-Level-Cache und Second-Level-Cache im Detail analysiert und spezifische Codebeispiele zur Veranschaulichung bereitgestellt. 1. Level-1-Cache Der Level-1-Cache wird auch als lokaler Cache bezeichnet. Er ist standardmäßig aktiviert und kann nicht deaktiviert werden. Der Cache der ersten Ebene ist SqlSes
[Analyse der Bedeutung und Verwendung von Mittelpunkt in PHP] In PHP ist Mittelpunkt (.) ein häufig verwendeter Operator, der zum Verbinden zweier Zeichenfolgen oder Eigenschaften oder Methoden von Objekten verwendet wird. In diesem Artikel befassen wir uns eingehend mit der Bedeutung und Verwendung von Mittelpunkten in PHP und veranschaulichen sie anhand konkreter Codebeispiele. 1. String-Mittelpunkt-Operator verbinden Die häufigste Verwendung in PHP ist das Verbinden zweier Strings. Indem Sie . zwischen zwei Saiten platzieren, können Sie diese zu einer neuen Saite zusammenfügen. $string1=&qu
Wormhole ist führend in der Blockchain-Interoperabilität und konzentriert sich auf die Schaffung robuster, zukunftssicherer dezentraler Systeme, bei denen Eigentum, Kontrolle und erlaubnislose Innovation im Vordergrund stehen. Die Grundlage dieser Vision ist das Bekenntnis zu technischem Fachwissen, ethischen Grundsätzen und Community-Ausrichtung, um die Interoperabilitätslandschaft mit Einfachheit, Klarheit und einer breiten Palette von Multi-Chain-Lösungen neu zu definieren. Mit dem Aufkommen wissensfreier Nachweise, Skalierungslösungen und funktionsreicher Token-Standards werden Blockchains immer leistungsfähiger und Interoperabilität wird immer wichtiger. In dieser innovativen Anwendungsumgebung eröffnen neuartige Governance-Systeme und praktische Funktionen beispiellose Möglichkeiten für Assets im gesamten Netzwerk. Protokollentwickler setzen sich nun mit der Frage auseinander, wie sie in dieser aufstrebenden Multi-Chain agieren sollen
Analyse der neuen Funktionen von Win11: So überspringen Sie die Anmeldung bei einem Microsoft-Konto. Mit der Veröffentlichung von Windows 11 haben viele Benutzer festgestellt, dass es mehr Komfort und neue Funktionen bietet. Einige Benutzer möchten jedoch möglicherweise nicht, dass ihr System an ein Microsoft-Konto gebunden ist, und möchten diesen Schritt überspringen. In diesem Artikel werden einige Methoden vorgestellt, mit denen Benutzer die Anmeldung bei einem Microsoft-Konto in Windows 11 überspringen können, um ein privateres und autonomeres Erlebnis zu erreichen. Lassen Sie uns zunächst verstehen, warum einige Benutzer zögern, sich bei ihrem Microsoft-Konto anzumelden. Einerseits befürchten einige Benutzer, dass sie
Wie kann der Quellcode von PHP-Code im Browser angezeigt werden, ohne dass er interpretiert und ausgeführt wird? PHP ist eine serverseitige Skriptsprache, die häufig zur Entwicklung dynamischer Webseiten verwendet wird. Wenn eine PHP-Datei auf dem Server angefordert wird, interpretiert und führt der Server den darin enthaltenen PHP-Code aus und sendet den endgültigen HTML-Inhalt zur Anzeige an den Browser. Manchmal möchten wir jedoch den Quellcode der PHP-Datei direkt im Browser anzeigen, anstatt ihn auszuführen. In diesem Artikel wird erläutert, wie der Quellcode von PHP-Code im Browser angezeigt wird, ohne dass er interpretiert und ausgeführt wird. In PHP können Sie verwenden
Aus Platzgründen folgt hier ein kurzer Artikel: Apache2 ist eine häufig verwendete Webserver-Software und PHP ist eine weit verbreitete serverseitige Skriptsprache. Beim Erstellen einer Website stößt man manchmal auf das Problem, dass Apache2 die PHP-Datei nicht korrekt analysieren kann, was dazu führt, dass der PHP-Code nicht ausgeführt werden kann. Dieses Problem wird normalerweise dadurch verursacht, dass Apache2 das PHP-Modul nicht richtig konfiguriert oder das PHP-Modul nicht mit der Version von Apache2 kompatibel ist. Im Allgemeinen gibt es zwei Möglichkeiten, dieses Problem zu lösen: Die eine ist