SpringBoot + MyBatis-Plus 实现分页操作详解

在SpringBoot项目中,结合MyBatis-Plus(简称MP)可以非常方便地实现分页功能。MP为开发者提供了分页插件PaginationInterceptor,只需简单配置即可使用。

一、配置分页插件

首先,在SpringBoot的配置类中(通常是带有@Configuration注解的类)配置PaginationInterceptor

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 {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); // 根据你的数据库类型选择相应的DbTypereturn interceptor;}
}

注意:在新版本的MyBatis-Plus中,分页插件的配置方式有所变化,不再使用PaginationInterceptor,而是使用MybatisPlusInterceptor结合PaginationInnerInterceptor。请根据你的MP版本选择合适的配置方式。

二、编写Mapper接口

接下来,在Mapper接口中定义分页查询的方法。不需要在Mapper的XML文件中编写SQL语句来实现分页,因为分页插件会自动对SQL进行分页处理。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Select;
import your.package.name.EntityClass; public interface YourMapper extends BaseMapper<EntityClass> {// 使用MP提供的分页功能,不需要编写具体的分页SQLIPage<EntityClass> selectPageList(Page<EntityClass> page, QueryWrapper<EntityClass> queryWrapper);
}

实际上,如果你的EntityClass正确继承了MP的BaseModel(在新版本中通常不需要继承),并且你的Mapper继承了BaseMapper,你甚至不需要在Mapper接口中定义上述的selectPageList方法,因为BaseMapper已经提供了分页查询的方法。

三、在服务层调用分页查询

在服务层,你可以调用Mapper接口中的分页查询方法。首先,你需要创建一个Page对象,并设置当前页码和每页显示的记录数。然后,调用Mapper的方法执行分页查询。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import your.package.name.EntityClass; 
import your.package.name.YourMapper; @Service
public class YourService {@Autowiredprivate YourMapper yourMapper;public Page<EntityClass> getPageList(int current, int size) {// 创建分页对象,current为当前页码,size为每页显示的数量Page<EntityClass> page = new Page<>(current, size);// 调用Mapper方法进行分页查询,这里假设没有额外的查询条件,如果有可以使用QueryWrapper添加条件return yourMapper.selectPage(page, null); // 如果你的Mapper没有定义selectPageList方法,请使用BaseMapper中的selectPage方法代替}
}

请注意:如果你的MP版本较新,且你的实体没有继承MP的任何类(这是推荐的做法),你应该直接使用BaseMapper中的selectPage方法。此外,如果你的查询需要额外的条件,可以创建一个QueryWrapper对象来指定这些条件。在上面的示例中,我没有添加任何条件,所以传递了null作为第二个参数。

四、在控制器中调用服务层的分页方法

最后,在控制器中调用服务层的分页方法,并将结果返回给前端。通常,前端会期望得到一个包含当前页码、总页数、每页记录数和数据列表的响应对象。你可以自定义一个响应类来封装这些信息,或者直接使用MP提供的Page对象。这里演示后者。

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import your.package.name.EntityClass; 
import your.package.name.YourService; @RestController
@RequestMapping("/your-endpoint")
public class YourController {@Autowiredprivate YourService yourService;@GetMapping("/page") // 分页查询的API路径,例如/your-endpoint/page?current=1&size=10public Page<EntityClass> getPageList(@RequestParam int current, @RequestParam int size) {// 调用服务层方法进行分页查询,并返回结果给前端return yourService.getPageList(current, size); // 这里的方法名应与服务层一致}
}

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

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

相关文章

软件测试/测试开发丨Windows系统chromedriver安装与环境变量配置

一、selenium 环境配置 1、chrome 浏览器的安装与配置 目前比较常用的浏览器是 Google Chrome 浏览器&#xff0c;所以本教程以 chrome 为主&#xff0c;后面简介一下其他浏览器的环境配置。 &#xff08;1&#xff09;chrome 下载: www.google.cn/chrome/ &#xff08;2&a…

Vue3 魔法:轻松删除响应式对象的属性

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃诸葛妙计&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &…

http基本格式

在计网主要详细介绍了网络的底层,这里主要讲网络的应用层 http/https http 简介 作用 : HTTP(Hypertext Transfer Protocol)是一种用于传输超文本&#xff08;Hypertext&#xff09;数据的协议&#xff0c;通常用于在Web浏览器和Web服务器之间传递信息。 特点 : 不加密传输…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑用户禀赋效应和环保意识不确定性的微电网鲁棒优化调度方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到微电网系统的优化调度方法&#xff0c;特别考虑了两个重要方面&#xff1a;用户禀赋效应和环保意识的不确定性。以下是对标题中关键术语的解…

代码随想Day55 | 392.判断子序列、115.不同的子序列

392.判断子序列 第一种思路是双指针&#xff0c;详细代码如下&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {//双指针if(s.empty()&&t.empty()) return true;int i0,j0;while(i<t.size()){if(s[j]t[i]) j;if(js.size()) return t…

uniapp 条件编译怎么写

在 uni-app 中&#xff0c;可以使用条件编译来实现根据不同平台编译不同代码的功能。条件编译的写法是以 #ifdef 或 #ifndef 加平台名称开头&#xff0c;以 #endif 结尾。例如&#xff1a; #ifdef APP-PLUS需条件编译的代码#endif#ifndef H5需条件编译的代码#endif#ifdef H5 ||…

Springboot整合Elasticsearch 7.X 复杂查询

这里使用Springboot 2.7.12版本&#xff0c;Elasticsearch为7.15.0。 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> yaml文件配置…

JSON.parseObject强制将自动转化的Intage型设置为Long型

通过Redis或Caffeine存储入json型String&#xff0c;通过JSON.parseObject自动类型转化之后&#xff0c;数值会优先转为Intage&#xff0c;如果存入的字符值大于Intage最大值&#xff0c;会自动转为Long型&#xff1b; 需求是&#xff1a;实要取出时数值类型值为Long&#xff1…

docker的安装以及使用经验

文章目录 一 前言1 关于环境2 关于docker的版本 二 centos在线安装2.1 添加docker源2.2 安装docker引擎安装指定的docker版本安装最新版本 三 centos离线安装四 windows安装五 写在最后 一 前言 2023年最后一天&#xff0c;一个朋友问我&#xff0c;关于docker安装的事情&…

JAVA反序列化之URLDNS链分析

简单介绍下urldns链 在此之前最好有如下知识&#xff0c;请自行bing or google学习。 什么是序列化 反序列化 &#xff1f;特点&#xff01; java对象反射调用&#xff1f; hashmap在java中是一种怎样的数据类型&#xff1f; dns解析记录有那…

tp5+workman(GatewayWorker) 安装及使用

一、安装thinkphp5 1、宝塔删除php禁用函数putenv、pcntl_signal_dispatch、pcntl_wai、pcntl_signal、pcntl_alarm、pcntl_fork&#xff0c;执行安装命令。 composer create-project topthink/think5.0.* tp5 --prefer-dist 2、配置好站点之后&#xff0c;浏览器打开访问成…

有道翻译web端 爬虫, js

以下内容写于2023-12-28, 原链接为:https://fanyi.youdao.com/index.html#/ 1 在输入框内输入hello world进行翻译,通过检查发出的网络请求可以看到翻译文字的http接口应该是: 2 复制下链接最后的路径,去js文件中搜索下: 可以看到这里是定义了一个函数B来做文字的翻译接口函数…

消息中间件常见知识点

一&#xff1a;消息队列的主要作用是什么&#xff1f; 1.消息队列的特性&#xff1a; 业务无关&#xff0c;一个具有普适性质的消息队列组件不需要考虑上层的业务模型&#xff0c;只做好消息的分发就可以了&#xff0c;上层业务的不同模块反而需要依赖消息队列所定义的规范进行…

华为OD机试 - Wonderland(Java JS Python C)

题目描述 Wonderland是小王居住地一家很受欢迎的游乐园。Wonderland目前有4种售票方式,分别为一日票(1天)、三日票(3天)、周票(7天)和月票(30天)。 每种售票方式的价格由一个数组给出,每种票据在票面时限内可以无限制地进行游玩。例如: 小王在第10日买了一张三日票…

【Spring之创建对象源码分析】

Spring之内部创建对象源码分析 1. 看源码(AbstractBeanFactory)2. 解析 1. 看源码(AbstractBeanFactory) SuppressWarnings("unchecked")protected <T> T doGetBean(String name, Nullable Class<T> requiredType, Nullable Object[] args,boolean type…

如何在2024年编写Android应用程序

如何在2024年编写Android应用程序 本文将介绍以下内容&#xff1a; 针对性能进行优化的单活动多屏幕应用程序 &#x1f92b;&#xff08;没有片段&#xff09;。应用程序架构和模块化 → 每个层面。Jetpack Compose 导航。Firestore。应用程序架构&#xff08;模块化特征驱动…

使用Python embeddable package 版(嵌入式、绿色版)分发自己的python程序

1、Python embeddable package 版介绍 https://www.python.org/downloads/windows/ Download Windows embeddable package (32-bit) 这个版本又称为嵌入式版&#xff0c;绿色版。该版本就是一个zip压缩包&#xff0c;解压缩之后得到一个文件夹&#xff0c;该文件夹包含了一个…

力扣139.单词拆分

思路&#xff1a;动态规划&#xff0c;设dp[]记录当前字符能不能通过字典里的单词到达&#xff0c;双层循环&#xff0c;外层循环遍历字符串每一个字符&#xff0c;内层遍历当前i字符之前的所有以i字符结尾的子串 例如字符串&#xff1a;leetcode i遍历到了t 那么内层循环就…

【C++】STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代器遍历 | map#insert 函数返回值处理 )

文章目录 一、map 容器迭代器遍历1、map 容器迭代器2、代码示例 二、map 容器插入结果处理1、map#insert 函数返回值处理2、代码示例 一、map 容器迭代器遍历 1、map 容器迭代器 C 语言中 标准模板库 ( STL ) 的 std::map 容器 提供了 begin() 成员函数 和 end() 成员函数 , 这…

Seata服务搭建与模式实现

日升时奋斗&#xff0c;日落时自省 目录 1、简述 2、Seata优越性 3、Seata组成 4、Seata模式 4.1、XA 模式 4.2、AT 模式(默认模式) 4.3、TCC 模式 4.4、SAGA 模式 4.5、XA协议 5、Seata服务部署 5.1、文件数据源部署 5.1.1、下载并安装Seata 5.1.2、启动Seata服…