乐观锁

(1)业务并发现象带来的问题:秒杀

执行:

1、在类对象中添加version属性,在数据库表中添加version字段(默认值为1)

package com.itheima.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data; @Data
//@TableName("tbl_user")
public class User { // @TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
@TableField(value = "pwd", select = false)
private String password;
private Integer age;
private String tel;
@TableField(exist = false)
private Integer online;
//逻辑删除字段,标记当前记录是否被删除
// @TableLogic(value = "0", delval = "1")
private Integer deleted; @Version
private Integer version; }

2、创建config.MpConfig类,在类中创建乐观锁拦截器

package com.itheima.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor(){
//定义mp拦截器
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
//添加具体的拦截器(分页)
mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
//添加乐观锁拦截器
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mpInterceptor;
} }

3、测试

  @Test
void testUpdate(){
User user = userDao.selectById(3L); //version=5 User user2 = userDao.selectById(3L); //version=5 user2.setName("Jockccc");
userDao.updateById(user2); //version=6 user.setName("Jocddd");
userDao.updateById(user); //version=5的条件不成立

结果:

控制台:

Mybatisplus----DML编程控制的更多相关文章

  1. Delphi - 利用DLL编程控制摄像头实现拍照、录制视频

    Delphi利用avicap32.dll编程控制摄像头实现拍照.录制视频 项目需求:平板电脑(Windows系统)一维/二维码扫描功能: 需求分析: 需要扫描一维/二维码时,分两步实现. 第一步,av ...

  2. [C#] 编程控制笔记本蓝牙与外部蓝牙设备通信

    一.蓝牙模块XLBT232‐D01介绍(外部设备蓝牙) 1.1.蓝牙模块简介 XLBT232-D0101蓝牙模块采用CSR BlueCore 芯片,配置6-8Mbit 的软件存储空间, 支持AT 指令 ...

  3. 利用Delphi编程控制摄像头(图)

    你的电脑有没有摄像头?看到别人用QQ玩视屏你会不会去想怎么实现的?这里介绍使用DELPHI使用MS的 AVICAP32.DLL就可轻松的实现对摄像头编程,如果再加上你的网络编程水平,实现一个视屏聊天就 ...

  4. Shell编程—控制脚本

    1处理信号 1.1信号表 编号 信号名称 缺省操作 解释 1 SIGHUP Terminate 挂起控制终端或进程 2 SIGINT Terminate 来自键盘的中断 3 SIGQUIT Dump ...

  5. Team Foundation API - 编程控制文件版本

    Team Foundation Server (TFS)工具的亮点之一是文件的版本控制.在TFS中实现文件版本控制的类型: Microsoft.TeamFoundation.Client.TfsTea ...

  6. 一篇文章带你掌握MyBatis简化框架——MyBatisPlus

    一篇文章带你掌握MyBatis简化框架--MyBatisPlus 我们在前面的文章中已经学习了目前开发所需的主流框架 类似于我们所学习的SpringBoot框架用于简化Spring开发,我们的国人大大 ...

  7. CAN总线简介:如何以编程方式控制汽车

    最近,我正与Voyage公司的朋友合作研究,以实现福特Fusion空调系统(A/C)的编程控制.目前,Voyage公司正努力打造自动驾驶的终极目标:能够以低廉的价格成本和广泛的投放范围,把世界任何地方 ...

  8. php编程知识点2018

    一 .PHP基础部分 1.PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows.Linux等)上配 ...

  9. 单片机与控制实验(2)——LED点阵显示屏

    一.实验目的和要求 了解LED点阵显示的基本原理和实现方法.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法. 二.实验设备 单片机测控实验系统 LED点阵显示器实验模块 Keil开发环境 STC ...

  10. Dom编程

    Dom编程 Dom是一种用于HTML和XML文档的编程接口,是HTML页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的文本框.层等元素进行编程控制 ...

随机推荐

  1. L2 Gracia Final OpCodz

    [83] Gracia Final Client 00 SendLogOut 01 RequestAttack 03 RequestStartPledgeWar 04 RequestReplyStar ...

  2. Flink配置详解及实践

    #jobManager的IP地址jobmanager.rpc.address: localhost #JobManager的端口号jobmanager.rpc.port: 6123 # JobMana ...

  3. 利用matlab求解函数微分

    利用matlab解决求解函数微分 matlab,微分 1. 问题提出 最近在复习高等数学,感觉可以结合 去理解他. 遇到了一个题目: 2. 具体代码 %{ 解决函数微分问题 %} clc; clear ...

  4. CH9121小结

    当通过网络配置工具将CH9121设置成UDP SERVER模式时,同时通过SRT-NET设置将PC设置成UDP并与CH9121用网线连接.将CH9121配置好与PC信息相匹配的端口号与IP地址,PC端 ...

  5. linux虚拟机,ifconfig无法获取静态ip地址

    之前一直显示这种ip地址,如下图(网图),查看了DHCP,是正常启动的,虚拟网络编辑器中设置的也正确.后来发现更改虚拟机的设置后就可以了,如下: 设置方法:VMware-虚拟机-设置-网络适配器,选择 ...

  6. 杭电oj--1019题C++实现

    这道题有两个问题: 首先,是求利用数论的辗转相除法求最大公约数,后再求最小公倍数m*n/gcd(m,n),其中,m*n可能会超过int 数据范围,所以,该语句换成m/gcd(m,n)*n. 然后是如果 ...

  7. HTML初体验之各种标签练习

    HTML初体验之各种标签练习 首先是<!DOCTYPE>标签 放在网页顶部的doctype声明是让浏览器进入正确呈现模式的关键.浏览器自动切换到恰当的呈现模式,以便正确显示由doctype ...

  8. Python-pytest -> Selenium之异常处理

    Selenium之异常处理: 引用的库:(可以查看库里提供的异常类) from selenium.common.exceptions import ElementNotVisibleException ...

  9. 创建Django项目的两种方式

    有两种方式可创建django项目: 方式一:命令行 1. cmd 命令行,进入到指定的目录,执行:django-admin startproject mydiary [mydiary 为项目名],创建 ...

  10. Rancher 快速构建k8s容器管理平台解决方案(图片见原文链接)

    转载自Rancher 快速构建k8s容器管理平台解决方案_IT干货的博客-CSDN博客_k8s容器管理平台 一.Rancher 概述 Rancher 是企业级多集群Kubernetes管理平台,一个为 ...