Hintergrund: Für denselben Datensatz in der Datenbank wird das Ergebnis aufgrund der Parallelität in der Datenbank, wenn zwei Personen gleichzeitig ändern und schließlich mit der Datenbank synchronisieren. Die einfachste Lösung besteht darin, dem Datensatz in der Tabelle ein Versionsfeld hinzuzufügen. Wenn Sie den Datensatz ändern, müssen Sie vergleichen, ob die Version übereinstimmt. Wenn es übereinstimmt, wird es aktualisiert, und wenn es nicht übereinstimmt, fällt es direkt aus. Wenn das Update erfolgreich ist, ist Version+1 festgelegt, was das sogenannte optimistische Sperre ist. Natürlich ist eine solche Logik am besten für Entwickler transparent, und dieses Plug-In ist hier, um dies zu tun.
1. Nutzung
<plugins> <plugin interceptor = "com.chrhc.mybatis.locker.Interceptor.optimisticLocker"/> </plugins>
2. Beschreibung der Plug-in-Konfiguration:
Das Java-Attribut, das der Spalte optimistischer Sperre der Standarddatenbankkonfiguration für das Plug-In entspricht, ist Version. Hier können Sie das Attributleben anpassen, zum Beispiel:
<Plugins> <Plugin interceptor = "com.chrhc.mybatis.locker.Interceptor.optimisticLocker"> <Eigenschaftsname = "VersionColumn" value = "xxx"/> <!-Spaltenname der Datenbank-Name-> <Property name = "Versionfeld" value = "xxx"/> <!
3. Effekt:
Zuvor: Benutzer set name =?, Password =? Wo id =?
Nach: Aktualisieren Sie den Benutzer set name =?, Password =?, Version = Version+1 WO ID =? und Version =?
4. Beschreibung des Versionswerts:
1. Wenn vorbereitete Einrichtungen den Versionswert erhalten, erhöht sich das Plug-In automatisch um 1.
2. Der gesamte Steuerungsprozess der optimistischen Sperre ist für den Benutzer transparent, was dem optimistischen Sperren von Hibernate sehr ähnlich ist, und die Benutzer müssen sich nicht um den Wert des optimistischen Sperrens kümmern.
5. Plug-in-Prinzip-Beschreibung:
Das Plug-In fängt die von MyBatis ausgeführte Update-Anweisung ab und fügt der ursprünglichen SQL-Anweisung eine optimistische Sperrmarke hinzu. Zum Beispiel ist der ursprüngliche SQL:
Benutzer set name =?, password =? wo id =?,
Dann muss der Benutzer die SQL -Anweisung nicht ändern. Mit Hilfe des Plug-In wird die obige SQL-Anweisung automatisch umgeschrieben wie:
UPDATE User Set name =?, password =?, Version = Version + 1 WO ID =? und Version =?,
Formular müssen Benutzer sich vor und nach der Version nicht um den Wert kümmern. Alle Aktionen sind für Benutzer transparent, und das Plug-In vervollständigt diese Funktionen selbst.
6. Standardkonvention:
1. Die Anweisungen der Aktualisierungsanweisung, die durch dieses Plug-In abgefangen wurden, sind alle vorbereitet, was nur für SQL auf diese Weise gültig ist.
2. Das <Podate> Tag von mapper.xml muss der Schnittstellen -Mapper -Methode entsprechen, dh unter Verwendung der von MyBatis empfohlenen Methode, aber mehrere Schnittstellen können einem Mapper.xml <Podate> -Tag entsprechen.
3. Dieses Plug-In wird nichts mit den Ergebnissen von SQL ansprechen, und was SQL selbst zurückgeben sollte;
4. Die Plug-In stellt standardmäßig alle Aktualisierungsanweisungen ab. Wenn der Benutzer keine optimistische Sperrsteuerung für ein bestimmtes Update wünscht, fügen Sie @VersionLocker (False) oder @VersionLocker (value = false) zur entsprechenden Mapper-Schnittstellenmethode hinzu, so dass das Plug-In nichts mit diesem Update entspricht, was dem nicht gleichwertigen Plug-In entspricht.
5. Dieses Plug-In unterstützt derzeit keine optimistischen Sperren für Stapel-Updates. Der Grund dafür ist, dass Stapel -Updates nicht viele Anwendungsszenarien in der tatsächlichen Entwicklung haben und es schwierig ist, optimistische Sperren für Stapel -Updates zu entwickeln.
6. Der Parameter -Typ der Mapper -Schnittstelle muss mit dem in der JDK -Version übergebenen tatsächlichen Typ übereinstimmen. In der JDK -Version gibt es unten keine Methode, um den Namen der Parameterlisten der Schnittstelle zu erhalten. Daher verwendet das Plug-In Parametertypen und Parameter als Zuordnungen, um der Methodensignatur zu entsprechen.
GitHub -Adresse: https://github.com/xjs1919/locker
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.