官网文档 https://baomidou.com/pages/24112f/
pom
Mybatis Plus常见注解
@TableName
用来指定表名,如果实体类符合驼峰命名,就可以省略不写,例如实体类为User
,数据库表名为user
,就可以不写 如果实体类名和表名不一样,可以使用@TableName
来指定。例如实体类为SysUser
,数据库表名为user
,就要使用注解,指定表名
@TableId
和@TableFieId
和@TableName
类似,实体类中属性和数据库表中的字段命名不一致的时候使用,@TableId
是用在主键ID上面的,而@TableFieId
用在普通属性上面, 需要注意的是,
- 如果数据库中字段以
is
开头的字段,类似is_ok
这种,就算符合驼峰命名,也得使用@TableFieId
- 如果字段和数据库关键词一样,也得使用
@TableFieId
并且转义
- 类中有不属于数据库的字段,要用
@TableFieId(exist=false)
标记,不然会被当成数据库表字段查询,引发报错
使用@TableId
的时候,可以指定主键的生成策略,有以下几种
条件构造器
Wrapper
构造器条件: https://baomidou.com/pages/10c804/#abstractwrapper
- 查询
- 替换掉硬编码,通过反射设置条件
- 更新
- 批量更新
Wappers
Wrappers 是一个用于构建SQL查询条件的工具类。 Wrappers 提供了一系列静态方法,代替了new一个构造器的方式,用于创建不同类型的查询条件包装器,以便在MyBatis-Plus的查询操作中使用。
查询:Wrappers.<实体类>lambdaQuery() 更新:Wrappers.<实体类>lambdaUpdate()
查询username为zhangsan的数据
修改taskname为zhangsan的数据,改为lisi
自定义sql
条件使用wrapper构建,前面的语句,写在sql中
- 基于wrapper构造where条件
- 在mapper方法参数中用Param注解声明wrapper变量名称,必须是ewmapper中接口方法:
- 自定义sql,并使用Wrapper条件
可以写在xml中,也可以使用@Select直接写在mapper方法上
修改
- 根据id修改
- 条件构造器作为参数进行更新
要是只改一个值,还有一种方法
- lambda构造器
类似动态sql的LambdaQueryWrapper
- lambdaQuery().
lambdaQuery().eq返回的其实就是一个wrapper,条件一共三个参数,参数1:boolean条件,类似动态sql的if,可选参数 参数2:条件的字段 参数3:条件的值 前面构造的是条件,最后一个list()是执行的方法,list()结果是个集合,还有其它的,例如one,返回的是一个对象 封装了一层又一层,总之能实现就行,太麻烦去找API,就直接Mapper上面使用@Select实现算了
- service
UserServiceImpl
- lambdaUpdate()
set和eq都是三个参数,第一个参数可选set是要修改的值 eq是条件 update()是执行的方法
IService和BaseMapper
MyBatisPlus的IService和BaseMapper接口,提供了很多方法,只需要实现,就能调用,
- Mapper
- IService这个IService接口中,有很多方法,但是又没有实现,具体的实现在IServiceImpl中,通过对应的IServiceImpl调用
Service
- ServiceImpl
实现类ServiceImpl,需要两个对象,一个是对应的Mapper,一个是对应的实体类,在ServiceImpl中,就是通过这个Mapper调用对应的Mapper,同时还要继承service接口
用的时候,就可以通过SysDeptServiceImpl 调用了
要不要加@Mapper,
要加,为什么有的代码没有加,mapper也生效了,肯定是以下三种情况之一,只是没有注意到
- 在springboot启动类使用了
@MapperScan
指定mapper位置, - 在mapper接口使用
@Mapper
- 在mybatis的配置类中,使用了``@MapperScan
批量新增
- 普通for循环逐条插入(最差)
- mybatisplus的批量新增(ServiceImpl.saveBatch(),性能较好)
- 在数据库连接后面添加参数rewriteBatchedStatements=true,(速度最快)
代码生成
使用一款IDEA插件MyBatisPlus
- 安装插件
- 安装好插件后,右上角出现一个
Other
,配置数据库, - 生成代码代码
- 效果因为我填了module,但是又没有module,所以生成单独一个包里面
静态工具类Db
MybatisPlus封装了一个静态工具类,在比较新的版本中才有,就是Db
使用方法,Db.
的方式使用,它的方法和Mapper中的方法基本一样,直接通过Db写条件就可以了
逻辑删除
将一个字段标记为指定值,例如默认delete=0,逻辑删除后delete=1只需要修改配置文件,remove相关的方法就变成了逻辑删除
枚举处理器
- 加配置
- 定义枚举
JSON处理器
数据库
实体类
映射json的类型
分页
分页插件
配置类
封装成想要的格式返回给前端
返回给前端的分页数据
调用
自定义sql分页
要有两条sql,区别在于,where条件要一样,但是一个有分页参数,一个没有分页参数没有分页参数的用来统计总条数有分页参数的,按照分页条件获取想要的数据
然后调用方法
还存在一个问题,如果是查询列表页面,如果你先跳转到第2页,然后再查询,那这个page默认就是2了,取不到值了,讲道理页码应该是从1开始才对,所以得加条件,前端直接传页码值为1进来,要不然就是后端处理,设置页码为第一页