前言
这一节我们讲MyBatis Plus
1. MyBatisPlus入门案例
我们主要用这个来完成标准的Dao开发
boot帮助我们快速开发spring程序,MyBatisPlus帮助我们快速开发Mybatis程序的
第一步加上mp的起步依赖,mp就是MybatisPlus
我们在导入druid
然后是配置
然后是做domain
注意我们id用的是Long
这样我们的dao就写完了
我们就可以测试了
我们dao什么都没写,就出来了很多全新的方法
然后我们直接这样,就可以运行找到了
但是按照我们上面的来,要出错,主要是sql语句写错了
这样就可以了
我们的表要和domain里面的类名一样,,表名user,类名User即可
2. MybatisPlus简介
我们用第二个官网
我们点快速开始
3. 标准CRUD制作
然后我们在删除这个,先不管这个id
这就说明了我们没写值,它就不会修改了,很方便
提供了什么字段,就修改什么字段
但是我们的实体类还比较难写,那些get和set方法写的好麻烦,我们可以导入一个lombok的jar
写了这些东西,我们就不用写对应的方法了,比如第一个@Setter,我们就不用写set方法了
但是写得还是好多
这一个Data就是上面的一堆,但是不包含构造方法
但是我们这样还是会报错,
主要是因为没有安装这个lombok的插件,我们去设置里面安装
然后就是这个依赖我们改一下,改为boot3
这样就可以正常运行了
4. 标准分页功能制作
看的出来我们要一个Page对象
为什么这样呢
因为MybatisPlus要配置一个分页拦截器,不配置的话,就没有这个分页拦截器
它是一个bean
所以我们又要写一个配置类了
这样分页的功能就可以用了
我们现在看看MybatisPlus的sql语句,就要看它的运行日志
我们在配置里面加上这个就可以了
这样就看到了
- 设个插件
- 直接调用,参数分装到page的对象中
日志是给我们来调试用的
5. 条件查询的三种格式
有Wrapper就是条件查询
先说一下,就是我们程序启动的时候,会有很多日志,MybatisPlus的日志,boot的日志,怎么干掉呢
去配一个lobback的文件
我们就这样写
这样我们没有info,但是还有这个图,继续干掉
加一个 global-config:
banner: false
就可以了
在配置中
这样就剩spring的banneer了
main:
banner-mode: off
加上即可
这样就成功了
第一种格式害怕可能属性名写错了,比如写成aeg了
第三种方式就是不用写lambda了
一般我们用第三种格式
现在我们搞个多条件的
然后还可以链式编程
现在我们来写一个或的关系
就是10和30两端的
这次就是小于10,或者大于30的
6. 条件查询null判定
如果没有填写某些条件该怎么处理
我们先做一个条件的模型类
这个用来分装User的条件
我们现在不设置最小值
这样就失败了
因为age为null了,找不到了
怎么处理呢
写出来的代码不要超过屏幕
当前也可以写if else来判断是否为空,但是不推荐,链式编程,可以换行写,不用写在一行
7. 查询投影
这个就是设置查询出来的结果长什么样子
现在我们来搞这个,如何把这个搞成只设置一些字段,只展示一些字段
但是这样写只适合lambda的格式
这样就是非lambda的写法了
我们这样写的话,就可以查看数量了
这样写就是加个别名
这样就分组成功了
8. 查询条件设置
查询一条的话,没有必要用List
这样的话就可以了
如果密码错误,返回的就是null了
现在开始范围查询
第二个参数是小的,后面那个是大的
right的意思就是J%,这个意思就是以J开始的
left的意思就是%J,这个意思就是以J结尾的,就是左边是%
我们去这个官网,看条件构造器,就可以看到所有的条件了
9. 映射匹配兼容性
表名和类名是一样的,然后属性和字段也一样,就自动关联上了,如果不相同呢
第二个问题就是类里面多了一个是否在线的对象,这个不要加在数据库里面,但是类和表就不对应了
问题三就是不查询password的属性
还有一个问题
表名和类名不一样咋办
我们先改表的名称
这样我们就可以了
然后我们改字段名,改password为pwd
这就可以了
现在我们加一个全新的成员变量
改
这样就可以了
接下来我们来隐藏pwd
10. id生成策略
这个是使用数据库默认的生成策略来做id
我们先点这个修改表
然后点到id,把自动增长改为5
这样就是以5递增的,这个就是最大值
这样就是我们的id生成策略了
我们这里有很多id生成策略,我们默认使用的就是3
改为input以后,数据库那里就不要有自增策略了
这个id生成策略,就是id由我们自己指定
不指定的话,就会出错
第三个id生成策略是雪花算法
意思就是我们指定了,用的id就是我们指定的
这种生成策略就是雪花算法
我们可以在配置中,让每一个实体类都使用相同的id生成策略
打一个id自动出来
这一个设定和 @TableId(type = IdType.ASSIGN_ID)是一模一样的
我们删掉这句话也可以运行了
然后就是@TableName(“tbl_user”)这个也能做全局配置,也能在配置文件中配置
这个的意思类名前面都拼上这个
以后每一个实体类都不用写@TableName(“tbl_user”)了
11. 多数据操作(删除和查询)
意思就是删除多条数据
看得出来这个deleteByIds就是删除多个的
而且我们还可以按照多个id进行查询
12. 逻辑删除
逻辑删除就是真的没有把数据删掉,就是做了一个标记
第一我们库里面要加一个字段,然后实体类要改一下,然后就是1还是0代表删除
我们先去改库
这样设置就可以了,0代表没删,也是默认值
然后开始修改实体类
怎么证明是逻辑删除字段呢,我们还要加个注解
然后我们在写什么代表删,什么代表没有删
然后就可以了
这里直接标记为1了,就说明已经删了
我们再看一下能不能查询
这样就说明了,deleted为1就查询不到了
如果想要看见全部数据,就要自己写sql语句了
能不能逻辑删除的注解不写呢,可以
这个可以在配置中写
这三个都要写
第一个是字段名,第二第三就是没删为0,删了为1
13. 乐观锁
我们先来增加一个字段,用来标记谁在操作这条数据
给一个默认值1
在给user字段加一个名
但是还不能用
它是这样设计了,有人来访问的这条数据的时候,为1就访问,然后把这个数据的version+1,那么同时另一个人拿到的锁就不一样了
version+1怎么加呢
开个拦截器就可以了,和分页一样,本身不好实现,开个分页拦截器就可以实现了
这个是之前的分页拦截器
然后就可以了
只有修改的时候才要乐观锁,怕同时修改
我们运行一下
但是没有version的事啊
因为我们设置的时候就没管version
看这个sql语句我们就知道了,传的version=1进去,然后它就变成version=2,放进去了,但是不提供这个version,就没有这个锁机制
所以我们修改数据的时候,要把version这个数据拿到,不然每次都是1
接下来讲一下我们怎么来实现加锁这个操作
我们现在来模拟很多个用户进来修改数据了
这样的话,最后一条修改就一定会失效
这里就说明了bbb没有执行,
反正就是上一条version改为4了,下一个就找不到version=3的了
还有就是要写拦截器的话,就在这里增加一行就可以了
拦截器就是动态增加sql语句
14. 代码生成器
就是根据模版填入数据
先导入两个坐标
我们在itheima的包下创建一个类
1.先创建代码生成器对象
2.执行代码生成器
但是我们这里不行呢,主要原因是因为,我们的依赖版本太高了,降低一下
但是我还是不行呢,所以我就不干了,因为高版本搞不了,后面有时间再搞吧
总结
MyBatis Plus就这样结束啦