MyBatis-Plus分页 vs PageHelper分页:全面对比与最佳实践

一、分页技术概述

在Java持久层框架中,分页是高频使用的功能。主流方案有:

  1. MyBatis-Plus分页:MyBatis增强工具的内置分页方案
  2. PageHelper分页:独立的MyBatis分页插件

二、核心相同点

基础功能一致

  • 都支持物理分页(LIMIT语句)
  • 都能返回分页元数据(当前页、总页数等)
  • 都基于MyBatis拦截器实现

开发体验

  • 都只需少量代码即可实现分页
  • 都支持主流关系型数据库

三、关键差异对比

特性MyBatis-Plus分页PageHelper分页
依赖关系需集成MyBatis-Plus独立jar包
分页启动方式构造Page对象传参ThreadLocal静态方法
返回值IPage接口对象PageInfo包装List
复杂SQL支持有限制(如嵌套查询可能失效)支持更复杂SQL场景
多数据源支持需要特殊配置天然支持
COUNT查询自动执行(可关闭)自动执行(可关闭)
与ORM集成深度集成条件构造器兼容任何MyBatis用法

四、使用指南

1. MyBatis-Plus分页使用

① 配置拦截器

@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

五、实战案例

案例1:多表联合分页查询(推荐PageHelper)

// 使用PageHelper
public PageInfo<UserVO> getUsersWithDepartment(int pageNum) {PageHelper.startPage(pageNum, 10);List<UserVO> list = userMapper.selectUsersWithDept();return new PageInfo<>(list);
}// SQL示例
@Select("SELECT u.*, d.dept_name FROM user u LEFT JOIN department d ON u.dept_id = d.id")
List<UserVO> selectUsersWithDept();

案例2:条件构造器分页(推荐MyBatis-Plus)

public IPage<User> searchUsers(String keyword, int pageNum) {LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery();wrapper.like(User::getName, keyword);Page<User> page = new Page<>(pageNum, 10);return userMapper.selectPage(page, wrapper);
}

六、性能优化建议

  • 1.关闭COUNT查询(大数据量时)
// MyBatis-Plus
Page<User> page = new Page<>(pageNum, size, false);// PageHelper
PageHelper.startPage(pageNum, size, false);
  • 2.特殊语法支持
// PageHelper对特殊语法更友好
PageHelper.startPage(1, 10).setCount(false);
List<Map<String,Object>> list = starrocksMapper.complexQuery();
  • 3.索引优化

  • 4.确保分页字段有索引

  • 5.带排序时建立复合索引

七、技术选型推荐

👉 推荐MyBatis-Plus分页

当:

项目已集成MyBatis-Plus

需要与条件构造器配合使用

使用标准SQL语法

需要强类型分页对象

👉 推荐PageHelper

当:

需要兼容原生MyBatis

涉及复杂SQL(嵌套/UNION等)

使用StarRocks等特殊数据库

需要快速集成多数据源

八、常见问题解答

Q:为什么PageHelper对复杂SQL支持更好?
A:PageHelper采用更"粗放"的拦截方式,不会深度解析SQL,而MyBatis-Plus的拦截器会尝试智能分析SQL结构。

Q:百万数据量如何优化?

使用游标分页(基于排序字段)

禁用COUNT查询

添加合适的索引

📌 最佳实践总结:新项目建议统一使用MyBatis-Plus分页,遗留系统或特殊需求使用PageHelper。无论哪种方案,都应关注分页性能,避免全表扫描

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

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

相关文章

PROFINET转MODBUS TCP网关在机械臂通信操作中的应用研究

在特定的汽车零部件生产工厂焊接生产线上&#xff0c;机械臂被应用于焊接作业&#xff0c;其控制体系基于Profinet协议。同时&#xff0c;工厂的自动化控制体系以西门子S7-1200PLC为核心&#xff0c;通过ModbusTCP协议实现数据交换。为实现焊接过程的自动化控制以及生产数据的实…

Mac中如何Chrome禁用更新[update chflags macos]

写在前面 在 macOS 系统中&#xff0c;系统更新提示的小红点常常让人不胜其扰。 尤其是当你希望保持现有系统的稳定性&#xff0c;或因兼容性问题暂不想升级时&#xff0c;这个小红点就像一个顽固的提醒。 - windowsMac版直接删除更新程序, 有效 cd ~/Library/Google/Googl…

LoRA使用-多个LoRA

LoRA的风格分类 不用去记它有什么很特别的风格&#xff0c;简单来说基础模型就像一个全能画手&#xff0c;什么都能画&#xff0c;而LoRA是在某个风格中经过特训的它的一个分身。使得它更精通该风格。 关于LoR风格分类&#xff1a;提示词撰写公式 Checkpoint&LoRA对比 训…

牛客刷题 — 【排序】[NOIP2012] 国王的游戏(高精度结构体排序)

1.题面&#xff1a;传送门 2. 思路&#xff1a; 相邻的两个大臣的先后顺序只会互相影响&#xff0c;并不会影响其他人的金币数。 假设前 i-1 个人左手上的数乘积为 s 。 ① 若 A 大臣排在B 大臣的前面&#xff0c;则&#xff1a; s 此时的金币数最大值为 。 ② 若B大臣排…

grpc 和限流Sentinel

基于gRPC的微服务通信模块技术方案书 1. 总体架构设计 #mermaid-svg-TiN9cudEfW5mCWHm {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TiN9cudEfW5mCWHm .error-icon{fill:#552222;}#mermaid-svg-TiN9cudEfW5mCWHm…

经典灰狼算法+编码器+双向长短期记忆神经网络,GWO-Transformer-BiLSTM多变量回归预测,作者:机器学习之心!

经典灰狼算法编码器双向长短期记忆神经网络&#xff0c;GWO-Transformer-BiLSTM多变量回归预测&#xff0c;作者&#xff1a;机器学习之心&#xff01; 目录 经典灰狼算法编码器双向长短期记忆神经网络&#xff0c;GWO-Transformer-BiLSTM多变量回归预测&#xff0c;作者&#…

VGG Image Annotator (VIA):一款免费的数据标注软件介绍与使用

VGG Image Annotator (VIA)&#xff1a;一款免费的数据标注软件介绍与使用 在计算机视觉领域&#xff0c;数据标注是训练机器学习模型的基础步骤之一&#xff0c;而标注工具的选择直接影响标注的效率和准确性。众多标注工具中&#xff0c;VGG Image Annotator (VIA) 是一个开源…

CSS实现百分比水柱图

背景 在echarts没发现有可以直接使用的展示百分比的柱形图,只好自己封装一个组件使用 实现思路 一、图形拆解 要实现的组件是一个 可配置的圆柱形液柱图组件&#xff0c;常用于展示比例进度&#xff0c;比如任务完成度、指标达成率等。把图拆成最小单元然后拼接起来&#x…

详解 rzsz 工具:Windows 与 Linux 文件传输

&#xff08;Linux之软件包管理器&#xff08;CentOS系统&#xff09; —— yum-CSDN博客&#xff09;rzsz工具之前我在这篇文章中介绍过&#xff0c;现在重新详细介绍一下该工具。rzsz 是一个用于在 Windows 和 Linux 系统之间传输文件的工具集&#xff0c;通常通过终端模拟器…

网络编程1(UDP)

网络编程套接字&#xff08;socket api&#xff09; 了解了网络的一些概念&#xff0c;接下来就要进行网络中的跨主机通信&#xff0c;了解网络中的一些API&#xff0c;这里谈到的API都是针对传输层进行的&#xff0c;这是因为我们编写的代码是在应用层&#xff0c;而传输层就…

【电机】定点线性映射

这是一个定点数线性映射的问题&#xff0c;通常用于将浮点型的物理量&#xff08;如速度、位置、扭矩&#xff09;转换为嵌入式系统中使用的整型数据格式&#xff0c;便于通过 CAN 总线或其它通信协议发送给电机控制器。 我们来逐步解析这个过程&#xff0c;并以“速度”为例说…

Spring Cloud 微服务(远程调用与熔断机制深度解析)

&#x1f4cc; 摘要 在微服务架构中&#xff0c;服务之间的远程调用是构建分布式系统的核心环节。然而&#xff0c;随着服务数量的增加和网络复杂度的提升&#xff0c;调用失败、延迟高、异常等问题变得越来越频繁。 为此&#xff0c;Spring Cloud 提供了强大的远程调用组件 …

electron-vite 抽离config.js

1、将config.js 放到resources下的config目录下 module.exports {url: http://192.168.1.17:8000,wsUrl: ws://192.168.1.17:8000, }2、在preload.js 暴露读取API src/preload/index.js(或你的preload入口) const fs require(fs); const path require(path);function getCo…

MySQL Undo Log 深度解析:事务回滚与MVCC的核心功臣

引言 作为MySQL的“数据后悔药”和“历史版本档案馆”&#xff0c;Undo Log&#xff08;回滚日志&#xff09;在事务处理和并发控制中扮演着至关重要的角色。今天咱们就从底层原理出发&#xff0c;结合实际场景&#xff0c;把Undo Log的“里里外外”说个明白&#xff01; 一、…

gin如何返回html

✅ 方法一&#xff1a;直接返回 HTML 字符串 这种方式适合简单场景&#xff0c;比如返回一段固定的 HTML 内容。 package mainimport "github.com/gin-gonic/gin"func main() {r : gin.Default()r.GET("/html", func(c *gin.Context) {htmlContent : <…

Insulation score算法解读

Insulation score&#xff08;IS&#xff09;&#xff0c;俗称绝缘分数&#xff0c;用于计算识别三维基因组中的拓扑关联结构域TAD。 首次提出是在&#xff1a; 1&#xff0c;概念 为染色体上的基因组区间分配‘绝缘评分’的方法。该评分用于衡量跨越每个区间的所有相互作用的…

电脑系统重装有什么用?

一、解决系统软件问题 1、修复系统崩溃与错误 系统出现频繁蓝屏、死机、启动失败或程序运行异常&#xff08;如驱动冲突、系统文件损坏&#xff09; 2、清除恶意软件与病毒 电脑中病毒或恶意软件难以通过杀毒软件彻底清除 二、优化系统性能 1、清理冗余文件与设置 长时间…

js随机生成一个颜色

在 JavaScript 中&#xff0c;随机生成颜色有多种方式&#xff0c;以下是最常见的几种实现方法&#xff1a; 方法1&#xff1a;生成随机十六进制颜色&#xff08;如 #FFFFFF&#xff09; 这是最常见的方式&#xff0c;生成格式为 #RRGGBB 的颜色字符串&#xff1a; function…

运维打铁: 服务器防火墙策略配置与管理

文章目录 思维导图一、防火墙基础1. 防火墙概念2. 常见防火墙类型3. 防火墙工作原理 二、策略配置1. 规则制定原则2. 端口与服务开放Linux 系统&#xff08;以 iptables 为例&#xff09;Windows 系统&#xff08;以 Windows 防火墙为例&#xff09; 3. IP 地址过滤允许特定 IP…

locate 命令更新机制详解

文章目录 **一、定时更新的实现载体&#xff1a;crontab 任务****二、定时任务的配置逻辑****三、更新触发的额外机制****四、更新流程的性能优化****五、常见问题与解决方案****总结** 一、定时更新的实现载体&#xff1a;crontab 任务 Linux 系统通常通过 crontab 定时任务 …