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

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.dtcms.com/a/299009.html

相关文章:

  • Vue3 学习教程,从入门到精通,Vue3 样式绑定语法详解与案例(17)
  • 学习随想录-- web3学习入门计划
  • 【自动化运维神器Ansible】Ansible常用模块之File模块详解
  • 收银系统优惠功能架构:可扩展设计指南(含可扩展性思路与落地细节)
  • selenium自动化鼠标和键盘操作
  • 06-ES6
  • 【LLM】Kimi-K2模型架构(MuonClip 优化器等)
  • 详解力扣高频SQL50题之550. 游戏玩法分析 IV【中等】
  • qt c++ msvc2017编译器解决界面中中文乱码问题
  • 数据赋能(336)——技术平台——智能化运营
  • 动态SQL标签
  • AI-调查研究-39-多模态大模型量化 微调与量化如何协同最大化性能与效率?
  • opencv学习(图像梯度)
  • 像素、视野、光源,都有哪些因素影响测量精度?
  • 【数据结构】栈和队列的实现
  • 【Java EE初阶 --- 网络原理】传输层---UDP/TCP协议
  • Spring boot Grafana优秀的监控模板
  • C++:list(2)list的模拟实现
  • 高并发微服务限流算法方案对比与实践指南
  • 【音视频协议篇】WebRTC 快速入门
  • 嵌入式——C语言:指针②
  • Kotlin线程同步
  • TCP/IP 网络编程面试题及解答
  • 数智管理学(三十九)
  • train_model_components ——组件模型的灵感,灵感
  • PYTHON从入门到实践-15数据可视化
  • 震网(Stuxnet):打开潘多拉魔盒的数字幽灵
  • Android ADB命令之内存统计与分析
  • C++对象模型
  • CH341 Linux驱动 没有 /dev/ttyCH341USB0