Contexte: Pour le même enregistrement dans la base de données, si deux personnes modifient les données en même temps, puis la synchronisent enfin dans la base de données, le résultat sera imprévisible en raison de la concurrence. La solution la plus simple consiste à ajouter un champ de version à l'enregistrement dans le tableau. Lors de la modification de l'enregistrement, vous devez comparer si la version correspond. S'il correspond, il sera mis à jour et s'il ne correspond pas, il échouera directement. Si la mise à jour est réussie, la version + 1 est définie, ce qui est le verrou disant optimiste. Bien sûr, une telle logique est préférable d'être transparente pour les développeurs, et ce plug-in est là pour le faire.
1. Méthode d'utilisation: Ajoutez la configuration suivante au fichier de configuration MyBatis et il est terminé.
<flugins> <plugin interceptor = "com.chrhc.mybatis.locker.interceptor.optimistlocker" /> </ plugins>
2. Description de la configuration du plug-in:
L'attribut Java correspondant à la colonne de verrouillage optimiste de la configuration de la base de données par défaut pour le plug-in est la version. Ici, vous pouvez personnaliser la vie des attributs, par exemple:
<Loss de plugins> <plugin interceptor = "com.chrhc.mybatis.locker.interceptor.optimistlocker"> <propriété name = "versionColumn" value = "xxx" /> <! - Nom de la colonne de la base de données -> <propriété name = "versionfiel
3. Effet:
Auparavant: Mettre à jour le jeu d'utilisateurs Nom =?, Mot de passe =? où id =?
Après: Mettez à jour le jeu d'utilisateurs Nom =?, Mot de passe =?, Version = Version + 1 Où id =? et version =?
4. Description de la valeur de la version:
1. Lorsque PréparedStatement obtient la valeur de la version, le plug-in augmentera automatiquement de 1.
2. L'ensemble du processus de contrôle du verrouillage optimiste est transparent pour l'utilisateur, ce qui est très similaire au verrou optimiste d'Hibernate, et les utilisateurs n'ont pas besoin de se soucier de la valeur du verrou optimiste.
5. Principe du plug-in Description:
Le plug-in intercepte l'instruction de mise à jour exécutée par MyBatis et ajoute une marque de verrouillage optimiste sur l'instruction SQL d'origine. Par exemple, le SQL d'origine est:
Mettre à jour le jeu d'utilisateur Nom =?, Password =? où id =?,
Alors l'utilisateur n'a pas besoin de modifier l'instruction SQL. À l'aide du plug-in, l'instruction SQL ci-dessus sera automatiquement réécrite comme:
Mettre à jour le jeu d'utilisateur Nom =?, Mot de passe =?, Version = version + 1 Où id =? et version =?,
Formulaire, les utilisateurs n'ont pas à se soucier de la valeur avant et après la version. Toutes les actions sont transparentes pour les utilisateurs et le plug-in remplit ces fonctions elles-mêmes.
6. Convention par défaut:
1. Les instructions de l'instruction de mise à jour interceptée par ce plug-in sont toutes préparées, qui n'est valable que pour SQL de cette manière;
2. La balise <fatedate> de Mapper.xml doit correspondre à la méthode du mappeur d'interface, c'est-à-dire en utilisant la méthode recommandée par MyBatis, mais plusieurs interfaces peuvent correspondre à une balise MAPPER.xml <fatedate>;
3. Ce plug-in ne fera rien aux résultats de SQL, et ce que SQL lui-même devrait retourner, c'est quoi;
4. Le plug-in intercepte toutes les instructions de mise à jour par défaut. Si l'utilisateur ne veut pas de contrôle de verrouillage optimiste pour une certaine mise à jour, ajoutez @versionLocker (false) ou @versionlocker (valeur = false) à la méthode d'interface de mappers correspondante, afin que le plug-in ne fasse rien à cette mise à jour, ce qui équivaut à ne pas avoir ce plug-in;
5. Ce plug-in ne prend actuellement pas en charge les verrous optimistes pour les mises à jour par lots pour le moment. La raison en est que les mises à jour par lots n'ont pas beaucoup de scénarios d'application dans le développement réel, et il est difficile de développer des verrous optimistes pour les mises à jour par lots;
6. Le type de paramètre de l'interface de mapper doit être cohérent avec le type réel passé. Par conséquent, le plug-in utilise des types de paramètres et des paramètres comme mappages pour correspondre à la signature de la méthode;
Adresse GitHub: https://github.com/xjs1919/locker
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.