背景:データベースの同じレコードについて、2人がデータを同時に変更してから最終的にデータベースに同期する場合、結果は同時性のために予測不可能になります。最も簡単な解決策は、テーブルのレコードにバージョンフィールドを追加することです。レコードを変更するときは、バージョンが一致するかどうかを比較する必要があります。一致する場合、更新され、一致しない場合、直接失敗します。更新が成功した場合、バージョン+1が設定されています。これはいわゆる楽観的ロックです。もちろん、このようなロジックは開発者に透明性を持つのが最善であり、このプラグインはこれを行うためにここにあります。
1。使用方法:MyBatis構成ファイルに次の構成を追加すると完了します。
<プラグイン> <プラグインInterceptor = "com.chrhc.mybatis.locker.interceptor.optimisticlocker"/> </plugins>
2。プラグイン構成の説明:
プラグインのデフォルトデータベース構成の楽観的なロック列に対応するJava属性はバージョンです。ここでは、属性寿命をカスタマイズできます。たとえば、次のようになります。
<プラグイン> <プラグインインターセプター= "com.chrhc.mybatis.locker.interceptor.optimisticlocker"> <プロパティ名= "versioncolumn" value = "xxx"/> <! - 列名の名前 - > <プロパティ名= "バージョンフィールド" value = "xxx"/> <
3。効果:
以前:ユーザーセットname =?、password =?どこでid =?
後:ユーザーセットname =?、password =?、version = version+1 where id =?およびversion =?
4。バージョン値の説明:
1. startStatementがバージョン値を取得すると、プラグインは自動的に1増加します。
2.楽観的なロックの制御プロセス全体はユーザーに透明であり、これはHibernateの楽観的ロックに非常に似ており、ユーザーは楽観的なロックの価値を気にする必要はありません。
5。プラグインの原則説明:
プラグインは、MyBatisによって実行された更新ステートメントをインターセプトし、元のSQLステートメントに楽観的なロックマークを追加します。たとえば、元のSQLは次のとおりです。
ユーザーセットname =?、password =?ここでid =?、
その後、ユーザーはSQLステートメントを変更する必要はありません。プラグインの助けを借りて、上記のSQLステートメントは自動的に書き換えられます。
ユーザーセット名=?、パスワード=?、バージョン=バージョン + 1ここでid =?およびversion =?、
フォーム、ユーザーはバージョンの前後に値を気にする必要はありません。すべてのアクションはユーザーに対して透明であり、プラグインはこれらの機能自体を完了します。
6。デフォルト条約:
1.このプラグインによって傍受された更新ステートメントのステートメントはすべて準備された状態であり、この方法ではSQLに対してのみ有効です。
2。mapper.xmlの<update>タグは、インターフェイスMapperメソッドに対応する必要があります。つまり、MyBatisが推奨する方法を使用しますが、複数のインターフェイスはmapper.xml <update>タグに対応できます。
3.このプラグインは、SQLの結果に何もしません。また、SQL自体が返すべきことは何ですか。
4.プラグインは、デフォルトですべての更新ステートメントをインターセプトします。ユーザーが特定の更新の楽観的なロックコントロールを必要としない場合は、 @versionlocker(false)または@versionLocker(value = false)を対応するマッパーインターフェイスメソッドに追加して、プラグインがこのアップデートに何もしないようにします。
5.このプラグインは現在、当面の間、バッチアップデートの楽観的なロックをサポートしていません。その理由は、バッチアップデートには実際の開発に多くのアプリケーションシナリオがなく、バッチ更新用の楽観的なロックを開発することは困難です。
6.マッパーインターフェイスのパラメータータイプは、渡された実際のタイプと一致する必要があります。これは、JDKバージョンでは、インターフェイスのパラメーターリスト名を取得するためのJDK8以下のメソッドがないためです。したがって、プラグインはマッピングとしてパラメータータイプとパラメーターを使用して、メソッドの署名と一致させます。
githubアドレス:https://github.com/xjs1919/locker
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。