MyBatis-Plus的进阶:乐观锁和悲观锁、逻辑删除、分页和查询构造器

本文详细介绍了乐观锁和悲观锁的概念、区别以及在MyBatis-Plus中的应用,包括数据版本号机制和MyBatis-Plus插件的配置。同时讨论了逻辑删除的原理、优点和配置方法,以及如何结合QueryWrapper进行分页查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.乐观锁和悲观锁

1.1.什么是乐观锁和悲观锁

1.2.乐观锁和悲观锁的区别

1.3.综合案例

2.逻辑删除

2.1.什么是逻辑删除

2.2.为什么使用逻辑删除

2.3.综合案例

2.3.1.官方提示

2.3.2.配置方式

2.3.3.案例演示

3.分页和查询构造器

3.1.查询构造器

3.2.分页


1.乐观锁和悲观锁

1.1.什么是乐观锁和悲观锁

乐观锁( Optimistic Locking )悲观锁是数据库中的两种并发控制机制。

乐观锁假定数据一般情况下不会发生冲突,因此在读取数据时不会对其加锁,而是在写入时先比较数据版本号(比如时间戳)是否相同,再进行操作。如果版本号相同,则表示该数据没有被其他进程修改,可以进行写操作;如果版本号不同,则表示该数据已经被其他进程修改,写操作会失败,需要重新读取数据进行操作。

乐观锁是为了解决并发过程中数据更新冲突的问题,乐观锁能提高并发过程中的程序吞吐量。

悲观锁则假定数据会发生冲突,因此在读取数据时就会对其加锁,防止其他进程同时修改此数据,直到当前进程操作完成并解锁后,其他进程才能再次操作该数据。

1.2.乐观锁和悲观锁的区别

乐观锁悲观锁的区别主要有以下几点:

  1. 加锁时间不同:乐观锁在读取数据时不会对其加锁,而是在写入时进行比较和加锁操作;悲观锁在读取数据时就会对其加锁。

  2. 冲突处理方式不同:乐观锁会在写入时进行比较和冲突检测,如果版本号不一致则操作失败,需要重新读取数据;悲观锁则会阻塞其他进程对该数据的访问,直到当前进程完成操作并解锁。

  3. 适用场景不同:乐观锁适用于并发量比较小、数据量比较大、操作更多为读取的场景;悲观锁适用于并发量比较大、数据量比较小、操作更多为写入的场景。

总的来说,乐观锁适用于并发冲突较少的场景,可以提高系统的并发性;悲观锁适用于并发冲突较多的场景,可以保证数据的一致性和安全性。

1.3.综合案例

使用数据版本(Version)记录机制实现乐观锁,这是乐观锁最常用的一种实现方式。

  • 如何实现乐观锁?

@Version 注解标记乐观锁,通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成立的时候才会修改成功。

1)取出记录时,获取当前 version

2)更新时,带上这个 version

3)执行更新时,update tableName set version = oldVersion + 1 where version = oldVersion

4)如果 version 不对,就更新失败

  • 如何使用MyBatis-Plus实现乐观锁?

第一步:给数据库表添加 version 字段,并设置默认值为1

第二步:实体类增加 version 属性,并添加 @Version 注解


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶大头*^_^*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值