SpringBoot中使用PageHelper插件实现Mybatis分页

场景

SpringBoot中整合Mybatis时一般添加的依赖为

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.1</version></dependency>

如果要实现分页查询的话,可以使用Mybatis的分页插件PageHelper

GitHub - pagehelper/Mybatis-PageHelper: Mybatis通用分页插件

官方使用教程:

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

这里是SpringBoot项目,可直接使用pagehelper-spring-boot-starter

GitHub - pagehelper/pagehelper-spring-boot: pagehelper-spring-boot

PageHelper-Spring-Boot-Starter 帮助你集成分页插件到 Spring Boot

注:

博客:
霸道流氓气质-CSDN博客

实现

1、项目中添加依赖

        <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version></dependency>

添加这一个依赖就够了,不用再引入mybatis的依赖,因为会自动引入多个依赖

完整pom依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><!--MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version></dependency>

这里spring-boot-starter-web引入2.6.13,且存在循环引入,为避免循环依赖引用报错,添加如下配置

spring:main:allow-circular-references: true

2、按照官方文档说明配置PageHelper

yml中添加如下配置

pagehelper:helperDialect: mysql # 指定数据库,不指定的话会默认自动检测数据库类型# 是否启用分页合理化。# 如果启用,当pagenum<1时,会自动查询第一页的数据,当pagenum>pages时,自动查询最后一页数据;# 不启用的,以上两种情况都会返回空数据reasonable: true# 是否开启自动分页? 分页插件会从查询方法的参数值中,自动 params 配置的字段中取值,查找到合适的值时就会自动分页。supportMethodsArguments: true # 默认值false,#  用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,#  不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;params: count=countSql

3、yml中同样添加mybatis的配置

mybatis:mapper-locations: classpath:mapper/*.xml    # mapper映射文件位置type-aliases-package: com.badao.demo.entity    # 实体类所在的位置configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   #用于控制台打印sql语句

4、如何在代码中使用分页

官方文档给出了多种用法

//第一种,RowBounds方式的调用
List<User> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectIf(1);//第三种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.offsetPage(1, 10);
List<User> list = userMapper.selectIf(1);//第四种,参数方法调用
//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
public interface CountryMapper {List<User> selectByPageNumSize(@Param("user") User user,@Param("pageNum") int pageNum,@Param("pageSize") int pageSize);
}
//配置supportMethodsArguments=true
//在代码中直接调用:
List<User> list = userMapper.selectByPageNumSize(user, 1, 10);//第五种,参数对象
//如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页
//有如下 User 对象
public class User {//其他fields//下面两个参数名和 params 配置的名字一致private Integer pageNum;private Integer pageSize;
}
//存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数
public interface CountryMapper {List<User> selectByPageNumSize(User user);
}
//当 user 中的 pageNum!= null && pageSize!= null 时,会自动分页
List<User> list = userMapper.selectByPageNumSize(user);//第六种,ISelect 接口方式
//jdk6,7用法,创建接口
Page<User> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() {@Overridepublic void doSelect() {userMapper.selectGroupBy();}
});
//jdk8 lambda用法
Page<User> page = PageHelper.startPage(1, 10).doSelectPage(()-> userMapper.selectGroupBy());//也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {@Overridepublic void doSelect() {userMapper.selectGroupBy();}
});
//对应的lambda用法
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> userMapper.selectGroupBy());//count查询,返回一个查询语句的count数
long total = PageHelper.count(new ISelect() {@Overridepublic void doSelect() {userMapper.selectLike(user);}
});
//lambdatotal=PageHelper.count(()->userMapper.selectLike(user));

下面介绍简单的PageHelper.startPage 静态方法调用

你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,

紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。

    @Overridepublic List<User> selectUserPage() {PageHelper.startPage(1, 10);return userMapper.findAll();}

编写单元测试

import com.badao.demo.entity.User;
import com.badao.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;@SpringBootTest
@RunWith(SpringRunner.class)
public class PageTest {@Autowiredprivate UserService userService;@Testpublic void testPage() {List<User> users = userService.selectUserPage();System.out.println(users.size());}}

单元测试运行结果

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

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

相关文章

PostgreSQL里实现计算多个数字的排列组合

在进行排列组合的时候&#xff0c;每一次需要知道是否有重复的值&#xff0c;并过滤出已经排列过的值。这个可以创建支持可变参数的函数来实现。下边的函数用到了聚合判断&#xff0c;并且可变参数使用variadic标记的数组。 postgres<16.1>(ConnAs[postgres]:PID[188277…

基于shp数据制作3DTiles建筑白膜

经纬管网建模系统MagicPipe3D&#xff0c;本地离线参数化构建地下管网、建筑三维模型&#xff0c;输出标准3DTiles服务、Obj模型等格式&#xff0c;支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析。欢迎下载试用&#xff1a;http://www.magic3d.…

抖音小店怎么做?不会做抖音小店怎么办?

大家好&#xff0c;我是电商花花。 如果想做抖音小店但是又不会做抖音小店的朋友可要看过来&#xff0c;现在抖音小店无货源发展的这么好&#xff0c;市场这么大&#xff0c;如果还不会做抖店的可要看过来了。 问什么别人一做就会爆单&#xff0c;就能找到商家&#xff0c;而…

二百二十四、Kettle——曲线实现从Hive插入更新到ClickHouse(分区字段是month或year)

一、目的 对于以month、year为分区字段的数据&#xff0c;不是像day字段分区那样每天增量插入更新即可&#xff0c;而是要以部分字段查询、部分字段更新&#xff0c;但是ClickHouse数据库并不适合更新操作&#xff0c;直接使用Kettle的插入更新控件会导致问题&#xff0c;必须…

基于python+django+vue.js开发的社区养老管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;老人管理、护工管理、亲属管理、病史管理、房间管理、活动管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.co…

Java项目,营销抽奖系统设计实现

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 项目&#xff1a;https://gaga.plus 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主&#xff0c;小傅哥。 经过这个假期的嘎嘎卷&#x1f9e8;…

软件实际应用实例分享,门诊电子处方模板制作教程,中西医诊所病历开单系统教程

软件实际应用实例分享&#xff0c;门诊电子处方模板制作教程&#xff0c;中西医诊所病历开单系统教程 一、前言 以下软件教程以 佳易王诊所电子处方软件V17.3为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、在开电子处方的时候&#xff0c…

算法-二叉树相关

判断二叉树是否是完全二叉树 思路&#xff1a;层次遍历&#xff0c;如果之前某个节点叶子节点为空&#xff0c;队列后续的所有节点的左右节点都不能非空&#xff0c;并且如果节点左节点为null但是右节点不为null该二叉树一定不是满二叉树 public static boolean isCBT1(Node …

沁恒CH32V30X学习笔记07---多功能按键框架使用

多功能按键框架使用 参考开源框架: GitHub - 0x1abin/MultiButton: Button driver for embedded system 框架使用说明: ch32gpio基本驱动 https://blog.csdn.net/u010261063/article/details/136157718 MultiButton 简介 MultiButton 是一个小巧简单易用的事件驱动型按…

python数据类型-字典

1 字典定义 1&#xff09;字典中的元素时一个个键值对&#xff0c;键和值之间用冒号&#xff1a;分隔&#xff0c;键值对元素之间用逗号分隔&#xff0c;格式&#xff1a;d {key1 : value1, key2 : value2 } 2&#xff09;字典中的键是唯一的&#xff0c;值可以重复 注**&…

Java 中是否存在内存溢出、内存泄漏?如何解决?举例说明(企业真题)

Java 中是否存在内存溢出、内存泄漏&#xff1f;如何解决&#xff1f;举例说明 解答&#xff1a; 存在&#xff01; 在程序执行的过程中&#xff0c;明明这是不再使用的内存空间了&#xff0c;但是jvm通过相关的算法判定以后不认为这是垃圾&#xff0c;那么就构成了内存泄漏…

相机图像质量研究(40)常见问题总结:显示器对成像的影响--画面泛白

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

阿里云幻兽帕鲁Windows 服务器怎么下载存档?

阿里云幻兽帕鲁Windows 服务器怎么下载存档&#xff1f;通过远程连接window服务器桌面的方式。 远程连接到阿里云的 Windows 服务器后&#xff0c;可以将压缩后的存档文件&#xff0c;拖动到 workbench\Download 目录后&#xff0c;就会触发浏览器的文件下载&#xff0c;然后将…

CSP-J 2023 复赛第2题:公路 ← 贪心算法

【题目来源】https://www.luogu.com.cn/problem/P9749https://www.acwing.com/problem/content/5311/【题目描述】 小苞准备开着车沿着公路自驾。 公路上一共有 n 个站点&#xff0c;编号为从 1 到 n。 其中站点 i 与站点 i1 的距离为 vi 公里。 公路上每个站点都可以加油&…

[职场] 预算员简历模板 #媒体#微信#笔记

预算员简历模板 个人简历 基本资料 姓名&#xff1a;蓝小小 性别&#xff1a;男 年龄&#xff1a;28岁 籍贯&#xff1a;重庆 现居地址&#xff1a;重庆渝中区 政治面貌&#xff1a;中共党员 婚姻状况&#xff1a;已婚 求职意向 意向岗位&#xff1a;预算员 期望薪…

notepad++的下载与使用

1.进入官网下载 https://notepad-plus-plus.org/ 点击下载即可 2.选择中文简体 3.建议安装在D盘 其余步骤按照指示就行 4.安装后这几个是必选的 设置完成后就可以写中文了 以此为例 结果为

mysql mgr集群部署

一、前言 mysql mgr集群是为了实现mysql高可用&#xff0c;分为单主集群和多主集群&#xff0c;单主集群只有一个主节点可写&#xff0c;节点发生故障时&#xff0c;自动进行主从的故障切换&#xff0c;多主集群所有节点都可写&#xff0c;当节点发生故障时&#xff0c;将故障节…

git操作---> 使用git push,和使用git push origin HEAD:[分支名]有什么区别呢?

git push origin HEAD:branch2: 这个命令显式地指定了你要推送的本地引用&#xff08;HEAD&#xff09;&#xff0c;以及远程仓库的目标引用&#xff08;origin/branch2&#xff09;。 HEAD 是一个引用&#xff0c;指向你当前所在的本地分支的最新提交。 这个命令的意图是将当…

如何在iStoreOS软路由系统中安装cpolar实现公网远程本地电脑桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能&#xff0c;也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

流量控制 可靠传输 滑动窗口之间的关系 以及 流量控制和可靠传输的关系

流量控制 可靠传输 滑动窗口之间的关系 流量控制、可靠传输和滑动窗口是网络通信中的三个重要概念&#xff0c;它们之间有密切的关系。 流量控制是指在数据传输过程中控制发送方发送数据的速率&#xff0c;以避免接收方无法及时处理大量数据而导致的数据丢失或拥塞。流量控制…