一、什么是乐观锁 乐观锁其实用一句话来形容其作用就是:当要更新一条记录的时候,希望这条记录没有被别人更新,从而实现线程安全的数据更新。结合下场景,记得那是一张库存表,有一个字段记录商品库存,涉及多个地方都有可能去更新它:程序A 查询到了这条数据,得到库存是800,准备+200更新成1000,但是还没更新。
按照乐观锁的原理,user2是可以更新成功的,也就是name会修改为“大周4”,version会加1。user因为前后拿到的版本号不对,更新失败。 结果符合预期,我们也可以看下mybatis的日志,进一步了解一下: 可以看到上面首先是2个查询,查询到的version都是1。 接着,第一个执行update语句的时候,where条件中version=1,可以找到数...
MyBatis-Plus乐观锁的实现原理是基于数据库中的乐观锁机制。乐观锁是一种乐观的并发控制策略,它假设在数据操作过程中很少会发生冲突,因此在读取数据时不会加锁,而是在写入数据时进行冲突检测。 具体来说,MyBatis-Plus乐观锁的实现原理包括以下几个步骤: 在数据库中添加一个版本号字段,通常为一个整数或时间戳类型的...
MyBatis-Plus乐观锁的优点和缺点如下:优点:1. 高并发性:乐观锁适用于高并发场景,可以提高系统的并发处理能力。2. 数据完整性:乐观锁可以保证数据在并发情况下的完整性,避免了数据冲...
mybatis-plus实现乐观锁 相信通过上面的说明,假设你已经明白了~~哈哈哈哈~下面开始实战吧 新建部门表 CREATETABLE`sys_dept` ( `dept_id`bigint(20)NOTNULLAUTO_INCREMENT COMMENT'部门id', `parent_id`bigint(20)DEFAULT'0'COMMENT'父部门id', `dept_name`varchar(30)DEFAULT''COMMENT'部门名称', ...
MyBatis Plus实现乐观锁的原理主要有以下2方面: 1. @Version注解 在需要进行乐观锁的字段上添加@Version注解: @Version private Integer version; MyBatis Plus会自动扫描@Version注解的字段。 2. 更新时检查version 在更新的SQL中,where条件会同时判断version是否匹配: ...
MyBatis Plus的分页插件MP分页插件是一个用于实现分页功能的插件。 工作原理是: 用户调用分页相关方法,如: IPage<User> page = userService.page(new Page<>(1, 10)); 分页插件会获取Page对象,解析页码和每页记录数。 在执行SQL前,分页插件会自动拼接分页SQL,例如: ...
一、什么是乐观锁 乐观锁其实用一句话来形容其作用就是:当要更新一条记录的时候,希望这条记录没有被别人更新,从而实现线程安全的数据更新。结合下场景,记得那是一张库存表,有一个字段记录商品库存,涉及多个地方都有可能去更新它:程序A 查询到了这条数据,得到库存是800,准备+200更新成1000,但是还没更新。
按照乐观锁的原理,user2是可以更新成功的,也就是name会修改为“大周4”,version会加1。user因为前后拿到的版本号不对,更新失败。 结果符合预期,我们也可以看下mybatis的日志,进一步了解一下: 可以看到上面首先是2个查询,查询到的version都是1。 接着,第一个执行update语句的时候,where条件中version=1,可以找到数...
按照乐观锁的原理,user2是可以更新成功的,也就是name会修改为“大周4”,version会加1。user因为前后拿到的版本号不对,更新失败。 结果符合预期,我们也可以看下mybatis的日志,进一步了解一下: 可以看到上面首先是2个查询,查询到的version都是1。 接着,第一个执行update语句的时候,where条件中version=1,可以找到数...