MyBatis-Plus分页插件使用详解

news2024/9/24 19:26:45

一、简述

在使用mybatis开发项目的时候我们通常使用pagehelper来进行分页操作,
但是我们在使用MyBatis-Plus 开发时,MyBatis-Plus内置已经有分页功能了,其实不需要在额外引入pagehelper依赖了,而且两者同时引入有时候还会导致分页功能失效,所以我们在使用MyBatis-Plus 开发时,就可以直接使用MyBatis-Plus自带的分页插件来实现分页功能。

二、使用步骤

2.1 导入MyBatis-Plus 依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
</dependency>
2.2 在项目中添加MyBatis-Plus 配置类

在这里插入图片描述
在这里插入图片描述

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 MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);// 设置数据库为mysql
        paginationInnerInterceptor.setMaxLimit(1000L); // 设置最大查询数量,防止一次查询太多数据,给数据库压力过大
        // 添加分页插件
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

配置好之后就可以在业务层实现分页功能了

2.3 使用

在mapper接口中有一个selectPage()方法

IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

该方法需要传入一个IPage类型的参数,和一个queryWrapper
这里我们需要知道什么时IPage。
在这里插入图片描述
官方文档的实例

// 假设要进行分页查询,每页显示10条记录,查询第1页,查询条件为 age > 25
IPage<User> page = new Page<>(1, 10);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 25);
IPage<User> userPage = userMapper.selectPage(page, queryWrapper); // 调用 selectPage 方法
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
System.out.println("Total users (age > 25): " + total);
for (User user : userList) {
    System.out.println("User: " + user);
}

下面我们就开始带入实际开发中

2.4 实际使用

controller层

    @GetMapping("/findStudentInfo")
    public R findStudentInfo(PageParam param) {
        return R.ok(studentCourseService.findStudentInfo(param));
    }

serviceImpl类

    public PageVO<Student> findStudentInfo(PageParam param) {
    	// 根据课程id查询选课学生id集合
        List<Integer> sidList = studentCourseMapper.getSidListById(param.getCid());
        // 创建page对象,根据前端传来的页面大小size,页码num,这里我封装了成一个param实体类了
        Page<Student> page = Page.of(param.getPageNum(), param.getPageSize());
        // 调用selectPage方法,构造一个条件查询器,查询在sidList 集合的学生信息,返回一个page对象
        Page<Student> studentPage = studentMapper.selectPage(page, new LambdaQueryWrapper<Student>().in(Student::getId, sidList));
        // 返回前端的VO
        PageVO<Student> pageVO = new PageVO<>();
        // 取出page中的记录,即根据分页信息查询到的学生信息
        pageVO.setList(studentPage.getRecords());
        // 总条数
        pageVO.setTotal(studentPage.getTotal());
        return pageVO;
    }

PageParam类

@Data
@ToString
public class PageParam {
    // 页码
    private Integer pageNum;
    // 页面大小
    private Integer pageSize;
    // 模糊查询关键字
    private String keyword;
    // 课程id
    private Integer cid;
}
测试
{
  "code": 20000,
  "msg": "成功",
  "data": {
    "total": 4,
    "list": [
      {
        "id": 2,
        "name": "www",
        "studentId": "3333"
      },
      {
        "id": 3,
        "name": "3333",
        "studentId": "1111"
      }
    ]
  }
}

sql语句
在这里插入图片描述
当然在创建page对象时还有定义其他功能,比如排序规则

最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主流商品API接口在电商跨境电商企业应用/项目中的重要作用

618狂欢已经开启&#xff0c;为了获取更大利益&#xff0c;电商商家应使用价格接口系统。价格接口对电商商家有多方面的好处&#xff0c;主要体现在以下几个方面&#xff1a; 1、价格接口系统可以帮助品牌和商家实现更加科学和精准的定价策略。通过实时获取多个主流电商平台&a…

公众号里面的试卷怎么打印

经过我们的观察发现&#xff0c;微信公众号中的试卷通常有两种形式&#xff1a;图片和文档。如果试卷是以图片的形式嵌入在文章中作为配图&#xff0c;您只需点击图片并长按&#xff0c;选择“保存图片”到手机中。之后&#xff0c;您可以选择任何方便的方式完成打印。 不过&am…

ELK企业级日志分析系统(分布式文件系统与企业级应用)

一、ELK 概述 1、ELK简介 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch 是基于Lucene&#xff08;一个全文检索引擎的架构…

笔记整理—uboot启动过程(4)BL2干了什么及内存排布

uboot的第一阶段结束于start_armboot&#xff0c;第二阶段的uboot代码主要负责soc外部硬件&#xff08;inand、网卡、......&#xff09;、uboot本身构建&#xff08;uboot指令、环境变量、......&#xff09;最后进入命令行&#xff0c;等待命令然后倒数&#xff0c;等待bootc…

Pytest框架环境切换实战教程

测试人员每天都跟不同的环境打交道&#xff0c;比如线上环境&#xff0c;测试环境&#xff0c;预上线环境等等&#xff0c;那么作为自动化测试人员写的代码&#xff0c;我们也要具备能自由切换环境的能力&#xff0c;那么今天小编就给大家聊一下&#xff0c;如何能让我们python…

linux 安装kafaka单体服务

1.下载kafka的linux安装包 前往Apache Kafka官方网站下载页面&#xff08;Apache Kafkahttps://kafka.apache.org/downloads&#xff09;&#xff0c;选择最新稳定版的Kafka二进制分发文件&#xff0c;通常是以.tgz结尾的文件。 手动下载kafka_2.13-3.8.0.tgz到本地&#xff0…

Spring Boot 与 Spring Security 的集成及 OAuth2 实现

我的主页&#xff1a;2的n次方_ 在现代 Web 应用开发中&#xff0c;安全性是至关重要的。无论是保护用户的敏感数据&#xff0c;还是确保 API 只允许经过授权的请求访问&#xff0c;开发者都需要一个强大且灵活的安全框架来实现这些需求。Spring Security 作为 Spring 框架的…

MATLAB 生成指定范围、角度、厚度的含噪平面点云(77)

模拟生成点云并可视化显示,可以验证算法有效性,尤其是针对验证算法的某方面 MATLAB 生成指定范围、角度、厚度的含噪平面点云(77) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 如题,模拟生成一组平面点云,含有噪声点,确定算法稳定性,可以指定生成平面的范围,厚…

混合A*算法

混合A*算法是一种改进版的A*算法&#xff0c;特别针对车辆动力学进行了优化。这种算法在经典A*的基础上引入了新的维度和概念&#xff0c;以生成更加实际可行的路径。 首先&#xff0c;混合A*算法不仅考虑x和y的位置&#xff0c;还引入了θ维度来表示车辆的朝向。这意味着搜索…

Unity视频播放插件-VideoPro(Windows)

Unity视频播放插件-VideoPro-windows &#x1f32e;介绍&#x1f364;使用方法&#x1f959;示例&#x1f333;rtsp&#x1f333;本地视频&#x1f333;网络视频 &#x1f32e;介绍 1.支持播放格式&#xff1a;rtsp、http、本地视频。 2.exe试用&#x1f308; 3.经测试i9 cpu 空…

【STM32开发笔记】搭建基于ST官方VSCode扩展的STM32开发环境

搭建基于ST官方VSCode扩展的STM32开发环境 一、安装软件1.1 安装VSCode1.2 安装STM32CubeMX1.3 安装STM32CubeCLT1.4 安装ST-MCU-FINDER-PC 二、安装插件2.1 安装 STM32 VS Code Extension 三、创建项目3.1 创建STM32CubeMX项目3.2 查阅原理图3.3 修改引脚功能3.4 生成CMake项目…

完成单位信息宣传工作考核投稿别输在投稿方法上

在信息化迅速发展的今天,弘扬社会正能量已经成为各个企事业单位的重要使命。作为单位的信息宣传员,我深知信息宣传工作的重要性和复杂性。每个月,我们都肩负着信息宣传考核的任务,需要在指定的媒体上投稿发表文章。然而,刚接触这一工作时,我却经历了一段艰辛而焦虑的历程。 我一…

ubuntu install Miniconda3(轻量级conda)

ubuntu install Miniconda3&#xff08;轻量级conda&#xff09; Miniconda3 是一个包含 conda 和 Python 的小型发行版&#xff0c;适合需要灵活定制python环境的用户。 一、下载Miniconda3 sudo apt-get update wget https://repo.anaconda.com/miniconda/Miniconda3-latest…

elasticsearch快照存储到linux本地路径或分布式存储系统mioio

一、使用linux本地目录做快照存储 1.编辑 elasticsearch.yml 文件&#xff0c;添加以下配置&#xff1a; path.repo: ["/path/to/your/backup/dir"]2.创建一个文件系统类型的快照仓库 PUT /_snapshot/my_local_repository {"type": "fs",&quo…

WIN 10 注册表损坏怎么办

系统修复功能 打开“设置”-“更新和安全”-“恢复”-“立即重新启动” 然后就会进入到恢复模式&#xff0c;在里面点“疑难解答”-“高级选项”-“启动修复” SFC工具 在电脑搜索框中输入“命令提示符”&#xff0c;右键点击“命令提示符”选择“以管理员身份运行”。随后在…

前端算法 === 计数排序

目录 计数排序算法的起源 算法的基本原理 算法的实现 代码示例 算法的优势与局限性 计数排序的应用场景 计数排序是一种简单而高效的排序算法&#xff0c;特别适合于处理一定范围内的整数排序问题。它的核心思想是利用额外的存储空间来记录数组中每个元素出现的次数&…

Ansible远程自动化运维

目录 概念 安装ansible modules模块和语法 命令行语法 模块 1. command 基础模块 常用的参数 2. shell模块 3. cron定时任务模块 4. user用户管理模块 参数 5. copy复制模块 参数 6. file模块 设置文件属性 参数 实验&#xff1a;批量创建目录 7…

staticHeader(静态标头)

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>staticHeader(静态标头)</title> </head…

C语言函数介绍(上)

函数概念库函数标准库和头文件库函数的使用方法头文件包含库函数文档的一般格式 自定义函数函数的语法形式函数例子 形参和实参实参形参实参和形参的关系 return 语句数组做函数参数 函数概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数 ykxb &…

msvcp120.dll丢失是怎么回事?几种靠谱修复msvcp120.dll的方法

在使用基于Windows的计算机进行日常工作或娱乐时&#xff0c;您可能会遇到一个错误消息&#xff1a;“无法启动此程序&#xff0c;因为计算机中丢失msvcp120.dll。”这样的提示通常在尝试启动某些程序或游戏时弹出&#xff0c;导致应用无法正常运行。这个问题通常与系统中的某个…