Antecedentes: para el mismo registro en la base de datos, si dos personas modifican los datos al mismo tiempo y finalmente los sincronizan a la base de datos, el resultado será impredecible debido a la concurrencia. La solución más fácil es agregar un campo de versión al registro en la tabla. Al modificar el registro, debe comparar si la versión coincide. Si coincide, se actualizará, y si no coincide, fallará directamente. Si la actualización es exitosa, se establece la versión+1, que es el llamado bloqueo optimista. Por supuesto, dicha lógica es mejor ser transparente para los desarrolladores, y este complemento está aquí para hacer esto.
1. Método de uso: Agregue la siguiente configuración al archivo de configuración de MyBatis y se completa.
<glugins> <plugin interceptor = "com.chrhc.mybatis.locker.interceptor.optimisticlocker"/> </glugins>
2. Descripción de la configuración del complemento:
El atributo Java correspondiente a la columna de bloqueo optimista de la configuración de base de datos predeterminada para el complemento es la versión. Aquí puede personalizar la vida de atributos, por ejemplo:
<glugins> <plugin interceptor = "com.chrhc.mybatis.locker.interceptor.optimisticlocker"> <propiedad name = "versionColumn" value = "xxx"/> <!-Nombre de columna de la base de datos-> <Property Name = "Versionfield" Value = "xxx"/> <!-Nombre de campo Java-> </glugin> </complementos>
3. Efecto:
Anteriormente: Actualizar el nombre del usuario Name =?, Password =? donde id =?
Después de: actualizar user set name =?, Contraseña =?, Versión = versión+1 donde id =? y versión =?
4. Descripción del valor de la versión:
1. Cuando se prepara el valor de la versión, el complemento aumentará automáticamente en 1.
2. Todo el proceso de control de bloqueo optimista es transparente para el usuario, que es muy similar al bloqueo optimista de Hibernate, y los usuarios no necesitan preocuparse por el valor del bloqueo optimista.
5. Descripción del principio de enchufe:
El complemento intercepta la declaración de actualización ejecutada por MyBatis y agrega una marca de bloqueo optimista en la declaración SQL original. Por ejemplo, el SQL original es:
Actualizar el nombre del usuario Name =?, Password =? donde id =?,
Entonces el usuario no necesita modificar la instrucción SQL. Con la ayuda del complemento, la instrucción SQL anterior se reescribirá automáticamente como:
Actualizar el user set nombre =?, contraseña =?, versión = versión + 1 donde id =? y versión =?,
Formulario, los usuarios no tienen que preocuparse por el valor antes y después de la versión. Todas las acciones son transparentes para los usuarios, y el complemento completa estas funciones ellos mismos.
6. Convención predeterminada:
1. Las declaraciones de la declaración de actualización interceptada por este complemento son todos preparados, que solo es válido para SQL de esta manera;
2. La etiqueta <Apalated> de mapper.xml debe corresponder al método mapeador de interfaz, es decir, utilizando el método recomendado por myBatis, pero múltiples interfaces pueden corresponder a una etiqueta mapper.xml <putate>;
3. Este complemento no hará nada a los resultados de SQL, y lo que SQL mismo debería devolver es qué;
4. El complemento intercepta todas las declaraciones de actualización de forma predeterminada. Si el usuario no desea un control de bloqueo optimista para una determinada actualización, agregue @versionLocker (false) o @versionLocker (valor = falso) al método de interfaz mapper correspondiente, para que el complemento no haga nada a esta actualización, lo que es equivalente a no tener este complemento;
5. Este complemento actualmente no admite bloqueos optimistas para actualizaciones por lotes por el momento. La razón es que las actualizaciones por lotes no tienen muchos escenarios de aplicación en el desarrollo real, y es difícil desarrollar bloqueos optimistas para las actualizaciones por lotes;
6. El tipo de parámetro de la interfaz mapper debe ser consistente con el tipo real pasada. Esto se debe a que en la versión JDK, no hay un método debajo de JDK8 para obtener el nombre de la lista de parámetros de la interfaz. Por lo tanto, el complemento utiliza tipos de parámetros y parámetros como asignaciones para que coincidan con la firma del método;
Dirección de Github: https://github.com/xjs1919/locker
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.