当前位置: 首页 > java >正文

MybatisPlus-18.插件功能-分页插件基本用法

一.配置分页插件

要使用分页插件,首先要进行MybatisPlus分页插件的配置。在未引入分页插件的情况下,MybatisPlus是不支持分页功能的,IServiceBaseMapper中的分页方法都无法正常起效。 所以,我们必须配置分页插件。

在项目中新建一个配置类:

其代码如下:

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()方法获取相关分页数据。

http://www.xdnf.cn/news/16349.html

相关文章:

  • Jmeter的元件使用介绍:(五)定时器详解
  • 无需云服务器的内网穿透方案 -- cloudflare tunnel
  • 【AI周报】2025年7月26日
  • 什么是ICMP报文?有什么用?
  • Android Data Binding 深度解析与实践指南
  • easy-llm-cli的安装和使用
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • Vue 3 与 Element Plus 中的 /deep/ 选择器问题
  • 论文阅读-RaftStereo
  • haproxy配置详解
  • QT核心————信号槽
  • 外带服务的温度:藏在包装里的“生活共情力”
  • [RPA] 日期时间练习案例
  • 二维数组相关学习
  • FastAPI入门:demo、路径参数、查询参数
  • 【图像理解进阶】如何在自己的数据集上释放segment anything模型方案的潜力?
  • 【GaussDB】构建一个GaussDB的Docker镜像
  • MySQL数据库本地迁移到云端完整教程
  • 20250726-4-Kubernetes 网络-Service DNS名称解析_笔记
  • 虚拟直线阈值告警人员计数算法暑期应用
  • MySQL性能优化配置终极指南
  • 【深基12.例1】部分背包问题 Java
  • 二分查找-268.丢失的数字-力扣(LeetCode)
  • ABP VNext + Razor 邮件模板:动态、多租户隔离、可版本化的邮件与通知系统
  • java面试题1
  • IOPaint 图像修复工具,学习笔记
  • openmv识别数字
  • 质数、因数、最大公约数经典问题整理
  • KNN 算法进阶:从基础到优化的深度解析
  • lesson24:Python的logging模块