1:首先在实体类的属性注解上使用@Version
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
@Data
@TableName("sys_visitant_data")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="sys_visitant_data对象", description="访客数据")
public class SysVisitantData {
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private String id;
@Excel(name = "访客openId", width = 15)
@ApiModelProperty(value = "访客openId")
private String visitantOpenId;
@Version
private Long version;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
2:在数据库表中添加version字段,注意实体类使用是long和int类型(和默认值为0)
3:在mybatis-plus拦截器中添加OptimisticLockerInnerInterceptor()乐观锁拦截器
@Configuration
@MapperScan(value={"org.demo.modules.**.mapper*"})
public class MybatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor= new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
4:demo(version字段版本会自动每次加一操作)
@PostMapping("/apply2")
public Result<?> apply2() {
SysVisitantData visitantData = sysVisitantDataService.getById("1724065295435689986");
Integer visitantNumber = visitantData.getVisitantNumber();
System.out.println("开始#2:" + visitantNumber);
visitantData.setVisitantNumber(visitantNumber + 5);
boolean flag = sysVisitantDataService.updateById(visitantData);
if (!flag){
throw new JeecgBootException("2保存失败");
}
System.out.println("更新#2:" + visitantData.getVisitantNumber());
return Result.OK();
}