Antecedentes: Para o mesmo registro no banco de dados, se duas pessoas modificarem os dados ao mesmo tempo e, finalmente, sincronizá -los com o banco de dados, o resultado será imprevisível devido à concorrência. A solução mais fácil é adicionar um campo de versão ao registro na tabela. Ao modificar o registro, você precisa comparar se a versão corresponde. Se corresponder, será atualizado e, se não corresponder, falhará diretamente. Se a atualização for bem-sucedida, a versão+1 será definida, que é o chamado bloqueio otimista. Obviamente, essa lógica é melhor ser transparente para os desenvolvedores, e esse plug-in está aqui para fazer isso.
1. Método de uso: Adicione a seguinte configuração ao arquivo de configuração do MYBATIS e ele está concluído.
<Plugins> <plugin interceptor = "com.chrhc.mybatis.locker.intercept.optimisticlocker"/> </plugins>
2. Descrição da configuração do plug-in:
O atributo java correspondente à coluna de trava otimista da configuração padrão do banco de dados para o plug-in é a versão. Aqui você pode personalizar a vida do atributo, por exemplo:
<lugins> <plugin interceptor = "com.chrhc.mybatis.locker.intercept.optimisticlocker"> <propriedade name = "versãocolumn" value = "xxx"/> <!-Nome da coluna do banco de dados-> <nome do nome "Name" = "xxx"/> <!
3. Efeito:
Anteriormente: Atualizar nome do conjunto de usuários =?, Senha =? onde id =?
Depois: Atualizar nome do conjunto de usuários =?, Senha =?, Versão = versão+1 onde id =? e versão =?
4. Descrição do valor da versão:
1. Quando preparado, o estatuto obtém o valor da versão, o plug-in aumentará automaticamente em 1.
2. Todo o processo de controle de bloqueio otimista é transparente para o usuário, o que é muito semelhante ao bloqueio otimista do Hibernate, e os usuários não precisam se preocupar com o valor do bloqueio otimista.
5. Descrição do princípio do plug-in:
A plug-in intercepta a instrução Atualização executada pelo Mybatis e adiciona uma marca de trava otimista na instrução SQL original. Por exemplo, o SQL original é:
Atualizar nome do conjunto de usuários =?, Senha =? onde id =?,
Em seguida, o usuário não precisa modificar a instrução SQL. Com a ajuda do plug-in, a instrução SQL acima será automaticamente reescrita como:
Atualizar nome do conjunto de usuários =?, senha =?, versão = versão + 1 onde id =? e versão =?,
Formulário, os usuários não precisam se preocupar com o valor antes e depois da versão. Todas as ações são transparentes para os usuários, e o plug-in completa essas funções.
6. Convenção padrão:
1. As declarações da declaração de atualização interceptadas por este plug-in são todas preparadas, o que é válido apenas para SQL dessa maneira;
2. A tag <Plem> do mapper.xml deve corresponder ao método do mapeador de interface, ou seja, usando o método recomendado pelo mybatis, mas várias interfaces podem corresponder a uma tag mapper.xml <T pela update>;
3. Este plug-in não fará nada com os resultados do SQL, e o que o próprio SQL deve retornar é o quê;
4. O plug-in intercepta todas as instruções de atualização por padrão. Se o usuário não desejar controle de bloqueio otimista para uma determinada atualização, adicione @versionLocker (false) ou @versionLocker (value = false) ao método de interface do mapeador correspondente, para que o plug-in não faça nada com esta atualização, o que é equivalente a não ter esse plug-in;
5. Atualmente, este plug-in não suporta bloqueios otimistas para atualizações de lote por enquanto. O motivo é que as atualizações do lote não possuem muitos cenários de aplicativos no desenvolvimento real e é difícil desenvolver bloqueios otimistas para atualizações de lote;
6. O tipo de parâmetro da interface do mapeador deve ser consistente com o tipo real passado. Isso ocorre porque, na versão JDK, não há um método abaixo do JDK8 para obter o nome da lista de parâmetros da interface. Portanto, o plug-in usa tipos de parâmetros e parâmetros como mapeamentos para corresponder à assinatura do método;
Endereço do Github: https://github.com/xjs1919/locker
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.