⭐Примечания к исследованию MybatisPlus⭐ (5) Внедрить оптимистичный механизм блокировки

задняя часть MyBatis
⭐Примечания к исследованию MybatisPlus⭐ (5) Внедрить оптимистичный механизм блокировки

Это пятый день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления

⭐August Update Challenge Day 5⭐, изучите MybatisPlus, приглашайте друзей учиться вместе 😁

Код Пипи КреветкаГлупый и забавный мальчик, который любит слушать песни и игры, как и большинство его друзей. Конечно, он также проявляет интерес к писательству. Эмм..., дни еще длинные, давайте усердно работать вместе. 🌈

Добро пожаловать, друзья, обратите внимание на мой публичный номер:JavaCodes, хотя в названии есть Java, но оно охватывает больше, чем область Java 😁, ждем вашего внимания ❤

Оригинальная ссылка⭐Примечания к исследованию MybatisPlus⭐ (5) Внедрить оптимистичный механизм блокировки

пролог

Колонка MybatisPlus

⭐Учебные заметки MybatisPlus⭐ (1) Создание среды и начало работы HelloWorld

⭐Учебные заметки MybatisPlus⭐ (2) Полный набор подробных объяснений CRUD

⭐Учебные заметки MybatisPlus⭐ (3) Реализовать логическое удаление и пейджинг

⭐Примечания к исследованию MybatisPlus⭐ (4) Подробное объяснение метода оболочки условного конструктора

Для построения среды см. модуль MybatisPlus по этой ссылке.



1. Обзор оптимистической блокировки

      Оптимистичная блокировкаПо сравнению с пессимистической блокировкой оптимистичный механизм блокировки использует более расслабленный механизм блокировки. В большинстве случаев пессимистическая блокировка зависит от механизма блокировки базы данных, чтобы обеспечить максимальную эксклюзивность операций. Но вместе с этим возникает много накладных расходов на производительность базы данных, особенно для длинных транзакций, что часто невыносимо. Оптимистичный механизм блокировки в определенной степени решает эту проблему. Оптимистическая блокировка, в основном основанная на управлении версиями данных (Version) реализация механизма записи. Что такое версия данных? то есть добавить единицу к даннымИдентификатор версииВ таблице базы данных таблицы базы данных это обычно реализуется путем добавления поля «Версия» для таблицы базы данных. При чтении данных вместе считывайте этот номер версии и добавляйте единицу к этому номеру версии при последующем обновлении. В настоящее время,Сравните данные версии отправленных данных с информацией о текущей версии соответствующих записей в таблице базы данных.Если номер версии отправленных данных равен текущему номеру версии таблицы базы данных, он будет обновлен, в противном случае он считаются просроченными данными.


2. Основные сценарии применения

намерение:

Когда запись должна быть обновлена, я надеюсь, что эта запись не была обновлена ​​​​другими

Оптимистичная реализация блокировки:

  • При извлечении записи получить текущую версию
  • При обновлении ставьте эту версию
  • При выполнении обновления установите version = newVersion, где version = oldVersion.
  • Если версия неверна, обновление не выполняется
–A线程
update user set name = “dong”, version = version+1 where id = 2 and version = 1

–B 线程抢先完成,这个时候version = 2,会导致A修改失败!
update user set name = “dong”, version = version+1 where id = 2 and version = 1

3. Настройте оптимистическую блокировку

Новое поле базы данных ==версия==

在这里插入图片描述

在这里插入图片描述

==Добавьте соответствующее поле версии в класс сущности Java==

在这里插入图片描述

@Описание версии:

  • Поддерживаются только следующие типы данных: int, Integer, long, Long, Date, Timestamp, LocalDateTime.
  • Целочисленный типnewVersion = oldVersion + 1
  • newVersionотпишусь вentity середина
  • поддерживает толькоupdateById(id) а также update(entity, wrapper)метод
  • существует update(entity, wrapper)по методу,wrapperПовторное использование невозможно!!!

==Создайте класс конфигурации и настройте подключаемый модуль оптимистичной блокировки==

@Configuration
public class MyConfig {

    //乐观锁插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

}

4. Протестируйте оптимистическую блокировку

在这里插入图片描述

Обычно конечным результатом будет тест 1, но результатом будет тест 2. Из-за механизма оптимистичной блокировки значения версии, полученные потоком 1 и потоком 2 в начале, равны 1, но после обновления потока 2, версия автоматически увеличивается до 2. В это время поток 1 для обновления версии не является ожидаемым значением 1, поэтому обновление не выполняется! ! !

在这里插入图片描述

在这里插入图片描述




наконец

яКод Пипи Креветка, любитель креветок Пеппи, который любит делиться знаниями, в ближайшие дни продолжит обновлять посты в блоге, полезные для всех, и с нетерпением жду вашего внимания! ! !

Это не легко создать, если этот пост в блоге полезен для вас, я надеюсь, вы сможете == одним щелчком мыши по трем ссылкам! ==, спасибо за поддержку, увидимся в следующий раз~~~


一键三连.png