一、MP简介
MyBatis Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
二、SpringBoot整合MP
1.创建SpringBoot工程
用到的技术集:MySQL Driver
2.添加MP起步依赖
3.配置数据库连接信息
4.制作数据库表和实体类
★lombok提供了创建实体类的一组注解,使用lombok快速创建实体类步骤:
(1)导坐标
(2)常用注解——@Data
@Data:为当前类设置get/set方法、构造方法、toString方法、hashCode方法、equals方法等。
5.定义dao层接口★
在MP下,dao接口只需要继承BaseMapper<Pojo>,MP会自动补全生成sql。
6.测试
三、MP分页查询功能的实现
1.设置分页拦截器
2.执行分页查询
【tips】IPage对象中封装了分页操作中的所有信息:
四、MP条件查询功能的实现
使用Wrapper抽象类的各种实现类来设置查询条件。
1.法一:使用QueryWrapper来设置查询条件
(1)创建QueryWrapper对象qw
(2)设置查询条件
column采用字符串的形式书写。
方法 | 条件 |
qw.lt(column,val) | 查询比column列的val值小的所有数据 |
2.法二:Lambda格式的条件查询
采用Lambda表达式的格式书写列名,防止用法一的字符串写错列名。
(1)创建对象
QueryWrapper<Pojo> qw = new QueryWrapper;(2)设置查询条件
qw.lambda().lt(Lambda表达式,val);
3.法三:Lambda格式条件查询增强版
使用LambdaQueryWrapper实现类来避免法二中每次都要写lambda方法的情况。
(1)创建对象
LambdaQueryWrapper<Pojo> lqw = new LambdaQueryWrapper;
不用写.lambda()了:
lqw.lt(Lambda表达式,val);
4.条件查询null值处理
当用户在条件查询输入框中不输入条件时,后台会接收到null,这时就不要对该条件进行查询。
(1)之前做法
缺点是需要对每一个条件进行if判断,繁琐。
(2)改进
使用第一个参数为boolean类型的方法,将(1)中的是否为null的条件判断放在第一个参数上:
5.查询条件API
6.pojo属性名与表字段的映射
7.pojo中添加了表中未定义的字段
8.采用默认查询所有(select *)暴露了不想开放的字段(如password)
9.表名与pojo名不同步
五、查询投影
1.查询部分列的数据
select id,username,age from tb_user;
2.聚合查询和分组查询
select count(*) as count,gender from tb_user group by gender;
六、增删改中的几个问题
1.增
(1)主键生成策略
【tips】雪花算法生成id的组成:
(2)生成策略控制
1)全局控制:让每一个pojo都使用相同的主键生成策略
在application.yml中配置:
2)单一控制:
2.删
(1)按id删除
deleteById()方法。
(2)按id批量删除
deleteBatchIds()方法。
(3)逻辑删除★
为数据设置是否可用状态字段,删除时将可用状态字段设为不可用状态,实现逻辑上删除了该数据,实际该数据仍存在数据库中。
1)单一设置
2)全局设置
3.改:乐观锁——用来解决小规模并发问题。
(1)在表和pojo中设置实现乐观锁的int类型字段version
(2)将pojo属性version设置为@Version
(3)添加乐观锁拦截器
【tips】使用乐观锁机制修改数据时,需要在修改前先获取该数据的version。
七、代码生成器
由MP提供代码模板,从数据库获取信息或由开发人员自定义。
1.导坐标(generator+velocity)
2.创建代码生成器运行类
3.设置代码生成器
(1)设置数据库信息
(2)设置全局配置
(3)设置包名相关配置
(4)★策略配置
八、业务层快速开发
使用MP提供的业务层通用接口IService<T>和业务层通用实现类ServiceImpl<M,T>,这两个通用的东西类似dao中继承的那个BaseMapper<T>,提供了一些通用功能。
业务层接口继承IService<POJO>,业务层实现类继承ServiceImpl<DAO,POJO>并实现业务层接口。
【tips】注意在通用功能基础上追加新业务功能时,不要与通用提供的方法重名(重名就重写方法了)。