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 悲观锁 如果查询条件会走索引才是行锁,否则会锁全部,性能差。
重试机制
下一篇:
Java 如何防止缓存穿透和缓存雪崩