首页 > 其他分享 >乐观锁

乐观锁

时间:2022-10-01 21:38:38浏览次数:75  
标签:userMapper private 乐观 version new Integer ew

@Configuration
public class MybatisPlusOptLockerConfig {

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 乐观锁插件
return interceptor;
}
}
  • 实体类
@Data
public class User {

@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@Version
private Integer version;
}
  • 测试类
/**
* 批量更新带乐观锁
* <p>
* update(et,ew) et:必须带上version的值才会触发乐观锁
*
* SELECT COUNT( 1 ) FROM user WHERE (version = ?)
* 1(Integer)
*
* UPDATE user SET age=?, version=? WHERE (version = ?)
* 28(Integer), 2(Integer), 1(Integer)
*
* SELECT COUNT( 1 ) FROM user WHERE (version = ?)
* 1(Integer)
*
* SELECT COUNT( 1 ) FROM user WHERE (version = ?)
* 2(Integer)
*/
@Order(4)
@Test
public void testUpdateByEntitySucc() {
QueryWrapper<User> ew = new QueryWrapper<>();
ew.eq("version", 1);
long count = userMapper.selectCount(ew);

User entity = new User();
entity.setAge(28);
entity.setVersion(1);

// updated records should be same
Assertions.assertEquals(count, userMapper.update(entity, null));
ew = new QueryWrapper<>();
ew.eq("version", 1);
// No records found with version=1
Assertions.assertEquals(0, userMapper.selectCount(ew).intValue());
ew = new QueryWrapper<>();
ew.eq("version", 2);
// All records with version=1 should be updated to version=2
//Assertions.assertEquals(count, userMapper.selectCount(ew).intValue());
System.out.println(count + "--->" + userMapper.selectCount(ew).intValue());
}



标签:userMapper,private,乐观,version,new,Integer,ew
From: https://blog.51cto.com/chniny/5728436

相关文章

  • MySQL数据库中乐观锁和悲观锁【杭州多测师】【杭州多测师_王sir】
    乐观锁和悲观锁的理解及如何实现,有哪些实现方式?悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会......
  • 从结算业务 深入理解 并发,mysql 乐观锁,可重复读
    从结算业务深入理解并发,mysql乐观锁,可重复读结算一般就是,把一些未结算的订单金额,周期性的结算到对应的账户表里面去。一般就是通过定时任务分批跑,比如每个......
  • EFCore乐观并发控制
    为了避免多个用户同时操作同一个资源造成的并发冲突问题,通常需要进行并发控制。并发控制分为:乐观和悲观两策略悲观:悲观并发控制一般采用行锁、表锁等排它销对资源进行锁......
  • Google:Andriod 系统前景不容乐观
    据国外媒体报道,相比于谷歌在谷歌网络开发年会GoogleI/O2015上对Andriod系统的乐观,目前Andriod系统在高端智能手机中的市场份额进一步降低,同时Andriod平板电脑也未对消......
  • SQL Server 锁机制 悲观锁 乐观锁 实测解析
     一、为什么会有锁多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:1.丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个......
  • 悲观锁和乐观锁
    https://segmentfault.com/a/1190000022839728悲观锁介绍悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在......
  • EFCore 悲观锁 和 乐观锁
    乐观并发控制并发令牌Owner经典例子就是两个人同时执行了抢购业务Update是同时执行的,这就导致后面的会覆盖前面的,导致业务出现问题!原理就是在update的表中Owner=......
  • 因为一个“乐观锁”引发的一些思考以及一系列问题
    1、思考过程:在讲“秒杀+分布式锁”解决商品超卖时候,我们并没有直接使用乐观锁的方式,而是采取了类似于乐观锁的一种解决方案,优化了SQL语句。超卖:在多个用户同时发起对同......