MyBatis-Plus(二)
视频链接:https://www.bilibili.com/video/BV12R4y157Be/?spm_id_from=333.337.search-card.all.click&vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P29— P57
文章目录
- 1.条件构造器
- 1.1 简介
- 1.2 组装查询条件
- 1.3 组装排序条件
- 1.4 组装删除条件
- 1.5 使用QueryWrapper实现修改功能
- 1.6 条件的优先级
- 1.7 组装select字句
- 1.8 组装子查询
- 1.9 使用UpdateWrapper实现修改功能
- 1.10 模拟开发中组装条件的情况
- 1.11 使用condition组装条件
- 1.12 LambdaQueryWrapper
- 1.13 LambdaUpdateWrapper
- 2.插件
- 2.1 分页插件的配置和使用
- 2.2 分页相关数据获取
- 2.3 自定义分页功能
- 3.乐观锁和悲观锁
- 3.1 模拟修改冲突
- 3.2 MyBatis-Plus的乐观锁插件
- 3.3 优化修改流程
- 4.通用枚举
- 5.代码生成器
- 6.多数据源
- 模拟多数据源环境
- 7.MyBatisX插件
- 7.1 安装
- 7.2 MyBatisX代码快速生成【实体类、mapper接口、映射文件、service接口以及实现类】
- 7.3 快速生成CRUD
1.条件构造器
1.1 简介
1.2 组装查询条件
测试类:
1.3 组装排序条件
1.4 组装删除条件
1.5 使用QueryWrapper实现修改功能
1.6 条件的优先级
1.7 组装select字句
1.8 组装子查询
SQL语句演示:
条件构造器方法:
1.9 使用UpdateWrapper实现修改功能
UpdateWrapper两个功能:
- 设置修改的条件
- 设置当前要修改的字段
1.10 模拟开发中组装条件的情况
1.11 使用condition组装条件
1.12 LambdaQueryWrapper
防止字段名写错
1.13 LambdaUpdateWrapper
防止字段名写错
2.插件
2.1 分页插件的配置和使用
MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能
测试类:
2.2 分页相关数据获取
getRecords【获取记录,获取数据】、getPages【获取总页数】、getTotal【获取总记录数】、hasNext【获取有没有下一页】、hasPrevious【获取是否有上一页】
2.3 自定义分页功能
配置文件:【为了在resultType中使用类型别名】
测试:
3.乐观锁和悲观锁
场景:一件商品,成本价是80元,售价是100元。老板先是通知小李,说你去把商品价格增加50元。小李正在玩游戏,耽搁了一个小时。正好一个小时后,老板觉得商品价格增加到150元,价格太高,可能会影响销量。又通知小王,你把商品价格降低30元。
此时,小李和小王同时操作商品后台系统。小李操作的时候,系统先取出商品价格100元;小王也在操作,取出的商品价格也是100元。小李将价格加了50元,并将100+50=150元存入了数据库;小王将商品减了30元,并将100-30=70元存入了数据库。是的,如果没有锁,小李的操作就完全被小王的覆盖了。
现在商品价格是70元,比成本价低10元。几分钟后,这个商品很快出售了1千多件商品,老板亏1万多。
乐观锁与悲观锁:
- 上面的故事,如果是乐观锁,小王保存价格前,会检查下价格是否被人修改过了。如果被修改过了,则重新取出的被修改后的价格,150元,这样他会将120元存入数据库。
- 如果是悲观锁,小李取出数据后,小王只能等小李操作完之后,才能对价格进行操作,也会保证最终的价格是120元。
3.1 模拟修改冲突
创建对象:
创建接口:
测试:
结果:
3.2 MyBatis-Plus的乐观锁插件
修改实体类:
配置类中设置:
展示:
小李在改的时候,版本号改为1了
3.3 优化修改流程
由于上面代码只有小李的执行了,小王的没有执行,于是进行优化
4.通用枚举
创建一个枚举对象:【还有构造方法】
在配置文件中:
在User中表示:
测试:
5.代码生成器
创建一个测试类:把下面代码放入其中
直接运行:
生成:
其中的文件:
6.多数据源
适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等
目前我们就来模拟—个纯粹多库的一个场景,其他场景类似
场景说明:
我们创建两个库,分别为: mybatis_plus (以前的库不动)与mybatis_plus_1(新建),将mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表,通过一个测试用例分别获取用户数据与商品数据,如果获取到说明多库模拟成功
模拟多数据源环境
在加上下面的注解:
定义User实体类:
定义Product实体类:
定义接口:
注册:
定义service接口:
实现类:
定义service接口:
实现类:
测试类:
展示:
注意:
7.MyBatisX插件
- MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率
- 但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表联查,我们就需要自己去编写代码和SQL语句,我们该如何快速的解决这个问题呢,这个时候可以使用MyBatisX插件
- MyBatisX—款基于IDEA的快速开发插件,为效率而生。
- MyBatisX插件用法: https://baomidou.com/pages/ba5b24/
7.1 安装
添加插件:
创建映射文件:
7.2 MyBatisX代码快速生成【实体类、mapper接口、映射文件、service接口以及实现类】
先连接数据库才能使用这个功能
效果:
7.3 快速生成CRUD
1.添加功能
2.删除功能
根据多个条件删除
3.修改功能
4.查询功能
5.排序功能