一、MP简介

        MyBatis Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
        官网:https://www.baomidou.com/

二、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;
(2)设置查询条件
        不用写.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】注意在通用功能基础上追加新业务功能时,不要与通用提供的方法重名(重名就重写方法了)。

1.接口定义

        

2.实现类定义