做软件去哪个网站,app软件定制平台,盐城网站建设制作,xml网站地图制作悲观锁 悲观锁是一种悲观思想#xff0c;它认为数据很可能会被别人所修改 所以总会对数据进行上锁#xff0c;读操作和写操作都会上锁#xff0c;性能较低#xff0c;使用较少#xff01; 乐观锁 乐观锁是一种乐观思想#xff0c;它认为数据并不一定会被别人所修改 所以… 悲观锁 悲观锁是一种悲观思想它认为数据很可能会被别人所修改 所以总会对数据进行上锁读操作和写操作都会上锁性能较低使用较少 乐观锁 乐观锁是一种乐观思想它认为数据并不一定会被别人所修改 所以读操作不会上锁但写操作时会先判断当前数据是否被修改过一般采用版本号机制来实现
乐观锁的实现方式 在表中添加一个 version 字段表示数据的版本 修改数据时首先判断自己当前拥有的 version 和数据库中的 version 是否一致 如果一致则修改数据同时将 version 加 1表示数据版本发生了变化 如果不一致则修改失败表示数据被别人修改过。
步骤 在实体类的字段上加上Version注解 Version // 乐观锁注解
private Integer version; 配置MybatisPlusConfig Configuration
MapperScan(net.wanho.mapper)
public class MyBatisPlusConfig {/*** 拦截器*/Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();// 分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 乐观锁插件interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;}} 测试 修改数据时执行的sql语句UPDATE product SET name?, price?, version? WHERE id? AND version? 修改的条件中对 version 做了判断只有和当前拥有的 version 一致才进行修改 修改的字段中对 version 做了1 判断是否修改失败 如果修改失败重新获取商品信息再次修改 if (result2 0) {// 5.小王修改失败重新获取商品信息p2 productMapper.selectById(1);// 6.小王将商品减了30元存入了数据库p2.setPrice(p2.getPrice() - 30);result2 productMapper.updateById(p2);System.out.println(小王修改结果 result2);
}