mybatis-plus中乐观锁@version的使用

参考:【进阶之路】Mybatis-Plus中乐观锁@version注解的问题与解决方案

配置

	@Bean
	public OptimisticLockerInterceptor optimisticLockerInterceptor() {
		return new OptimisticLockerInterceptor();
	}

实体类 字段是integer类型,数据库也要有这个字段

package com.yymt.entity.zaxq;

import com.baomidou.mybatisplus.annotations.*;
import com.baomidou.mybatisplus.enums.FieldFill;
import com.baomidou.mybatisplus.enums.FieldStrategy;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;

/**
 * 实有人口信息表
 *
 * @author xielin
 * @date 2021-01-05 21:17:35
 */
@TableName("tb_real_people")
@ApiModel("实有人口信息表")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class ZaxqRealPeopleEntity implements Serializable {


    private static final long serialVersionUID = 1L;

    @Version
    private Integer version;

    /**
     * id
     */
    @TableId
    private Long id;


    /**
     * 数据状态,有效性,1:有效 0:无效,用于处理原库删除数据问题,默认1
     */
    @TableLogic(value = "1", delval = "0")
    private String sjzt;

    /**
     * 姓名首字母
     */
    private String initials;

    /**
     * 所属小区id
     */
    private Long communityId;

    /**
     * 图片地址
     */
    @TableField(strategy = FieldStrategy.IGNORED)
    private String imagePath;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;



}

一定要设置Version,不然不生效。version会自动在该版本上加1

    @PutMapping(value = "/testJson")
    @ApiOperation(value = "testJson")
    public R testJson2() {
        zaxqRealPeopleService.updateById(new ZaxqRealPeopleEntity().setId(19692L).setXm("testJson2").setVersion(2));
        return R.ok();
    }

生成的sql

UPDATE tb_real_people SET version=3, xm='testJson2', image_path=null, update_time='2021-08-12 20:28:57.29'
 WHERE id=19692 and version=2 AND sjzt='1';

for update 悲观锁 如果查询条件会走索引才是行锁,否则会锁全部,性能差。

重试机制
mybatis-plus中乐观锁@version的使用_第1张图片

你可能感兴趣的:(mybatis,mysql,java)