一.配置分页插件
要使用分页插件,首先要进行MybatisPlus分页插件的配置。在未引入分页插件的情况下,MybatisPlus
是不支持分页功能的,IService
和BaseMapper
中的分页方法都无法正常起效。 所以,我们必须配置分页插件。
在项目中新建一个配置类:

其代码如下:
package com.itheima.mp.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {// 在拦截器中添加分页拦截器MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 创建分页拦截器PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);// 设置最大分页数paginationInnerInterceptor.setMaxLimit(1000L);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}
}
二.进行分页查询
在对分页插件进行配置后,我们使用分页插件进行分页查询。首先我们来看IService接口的page方法源码:
default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper) {return this.getBaseMapper().selectPage(page, queryWrapper);}
这个page方法传两个参数,一个是返回值类型为泛型类型的参数page,另一个是查询条件queryWrapper。其中queryWrapper可以不传,为无条件筛选。
那么泛型E都有哪些类型呢?我们可以看到泛型E继承了IPage类型,可以看一下有哪些类继承了IPage接口。
可以看到Page类,PageDTO类都继承了IPage类。因此E可以是Page,PageDTO和IPage类。Page类是常用的。我们选择Page类。Page当中包含了页码,每页记录数,排序字段,方式等。
值得注意的是:传入的参数page的类型E和该方法返回值类型相同。这是因为传入的page参数只包含查询前的条件,如页码,每页展示的记录数,查询结果展示顺序等。但返回值包含了查询后的结果,因此返回值的类型相同,都为泛型E,但是其中包含的内容不同。
综上:我们要使用page方法,要先创建一个Page类的对象,并指定好分页的参数,然后将其传入IService接口的page方法返回一个Page类的对象。该对象封装好了分页的结果。
三.代码实现
package com.itheima.mp.service.Impl;import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.mp.domain.po.User;
import com.itheima.mp.domain.po.UserInfo;
import com.itheima.mp.service.IUserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@SpringBootTest
class UserServiceImplTest {@Autowiredprivate IUserService userService;@Testvoid testPage() {// 1.定义页码、每页大小int pageNum = 1;int pageSize = 2;// 2.定义分页对象Page<User> page = Page.of(1, 2);// 3.添加排序条件page.addOrder(new OrderItem("balance",true));page.addOrder(new OrderItem("id",true));// 4.分页查询Page<User> p = userService.page(page);// 5.获取总记录数long total = p.getTotal();System.out.println(total);// 6.获取总页数long pages = p.getPages();System.out.println(pages);// 获取当前页数据List<User> records = p.getRecords();records.forEach(System.out::println);}
}
首先使用Page类的of方法创建一个Page对象,并传入页码和每页展示的记录数。然后调用该对象的addOrder方法指定排序字段和排序方式。true为升序,false为降序。
然后将其传入IService接口的page方法中得到分页后的Page对象。调用getTotal(),getPages()和getRecords()方法获取相关分页数据。