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

MyBatis-Plus--PageHelper 与 MyBatis-Plus 分页插件

比较

比较维度PageHelperMyBatis-Plus 分页插件
类型独立的 MyBatis 分页插件MyBatis-Plus 内置的分页插件
启动分页方式需要在查询前显式调用 PageHelper.startPage()传入分页对象(Page),插件自动拦截
配置复杂度需要配置 PageInterceptor 拦截器及参数只需配置 MybatisPlusInterceptorPaginationInnerInterceptor
依赖关系额外依赖 pagehelper-spring-boot-starter依赖 MyBatis-Plus,集成度更高
统计查询自动执行 COUNT(*) 查询自动执行 COUNT(*) 查询
返回结果类型PageInfo<T>IPage<T>(一般用 Page<T> 实现类)
SQL 改写原理拦截器动态修改 SQL,加入 LIMIT拦截器动态修改 SQL,加入 LIMIT
使用体验需显式调用分页方法,容易漏调用使用更简洁,传入分页参数即可
功能拓展专注分页,功能较单一除分页外,还提供代码生成、逻辑删除等多功能
适用场景纯 MyBatis 项目,兼容性好使用 MyBatis-Plus 项目,推荐使用

重点总结

  • PageHelper

    • 作为一个独立插件,适用于任意 MyBatis 项目。

    • 需要在每次分页查询前调用 PageHelper.startPage() 开启分页。

    • 返回 PageInfo,包含分页结果和元数据。

  • MyBatis-Plus 分页插件

    • 是 MyBatis-Plus 框架内置的分页机制。

    • 只要传入分页对象,插件自动拦截修改 SQL。

    • 返回 IPage 接口的实现,包含分页结果和元数据。

    • 集成度高,功能丰富,使用更方便。


小贴士

  • 如果项目用的是 MyBatis-Plus,建议使用自带的分页插件,代码更简洁且统一。

  • 如果项目是纯 MyBatis,且不想引入 MyBatis-Plus,则使用 PageHelper 更合适。

一、PageHelper 分页示例(Spring Boot)

1. 引入依赖(pom.xml)

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

2. 配置类(PageHelperConfig.java)

@Configuration
public class PageHelperConfig {@Beanpublic PageInterceptor pageInterceptor() {PageInterceptor interceptor = new PageInterceptor();Properties properties = new Properties();// 设置参数,支持合理化分页properties.setProperty("helperDialect", "mysql"); // 数据库方言properties.setProperty("reasonable", "true");     // 页码<=0查询第一页,超过总页数查询最后一页properties.setProperty("supportMethodsArguments", "true"); // 支持通过方法参数传入分页参数interceptor.setProperties(properties);return interceptor;}
}

3. Mapper 接口(UserMapper.java)

@Mapper
public interface UserMapper {@Select("SELECT * FROM user")List<User> selectAllUsers();
}

4. Service 调用分页(UserService.java)

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public PageInfo<User> getUserPage(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize); // 重点:调用分页方法List<User> users = userMapper.selectAllUsers();return new PageInfo<>(users);}
}

5. Controller 示例(UserController.java)

@RestController
@RequestMapping("/pagehelper")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public PageInfo<User> getUsers(@RequestParam int page, @RequestParam int size) {return userService.getUserPage(page, size);}
}

二、MyBatis-Plus 分页插件示例(Spring Boot)

1. 引入依赖(pom.xml)

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>

2. 分页插件配置类(MybatisPlusConfig.java)

@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 配置数据库类型,这里以 MySQL 为例interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

3. Mapper 接口(UserMapper.java)

@Mapper
public interface UserMapper extends BaseMapper<User> {// 继承BaseMapper即可,无需写分页方法
}

4. Service 示例(UserService.java)

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public IPage<User> getUserPage(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);return userMapper.selectPage(page, null); // 无条件分页查询}
}

5. Controller 示例(UserController.java)

@RestController
@RequestMapping("/mybatisplus")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public IPage<User> getUsers(@RequestParam int page, @RequestParam int size) {return userService.getUserPage(page, size);}
}

总结

特点PageHelperMyBatis-Plus 分页插件
启动分页方式需要调用 PageHelper.startPage()传入 Page 对象,自动拦截
配置复杂度需要配置分页拦截器及参数只需配置 MybatisPlusInterceptor
返回分页对象PageInfo<T>IPage<T>
使用场景纯 MyBatis 项目,老项目兼容使用 MyBatis-Plus 项目推荐使用
http://www.dtcms.com/a/296539.html

相关文章:

  • SAP全自动化工具开发:Excel自动上传与邮件通知系统
  • Flutter之Widget体系与布局原理
  • 汉字转拼音
  • Kiro AI是如何帮我实现发布 harpoon 项目
  • 如何使用 php-vulnerability-hunter
  • 中国网专访百胜软件董事长兼CEO黄飞:中台助力新时代下零售行业的探索
  • go下载包
  • go语言基础教程:【1】基础语法:变量
  • Verilog 提取信号的上升沿或者下降沿
  • Python中常用标准库(时间库、随机库、正则表达式)
  • shell 正则表达式
  • Golang 语言中的指针介绍
  • 高版本Android跨应用广播通信实例
  • 40、鸿蒙Harmony Next开发:UI场景化-组件截图(ComponentSnapshot)
  • C++第一节课入门
  • Qt 元对象系统(Meta-Object System)解析
  • 前端安全问题怎么解决
  • 企业资产管理智能化:IT运维如何借力数字化管理提效避坑?
  • 配置DNS服务的正反向解析
  • 详解FreeRTOS开发过程(六)-- 队列
  • ESP32- 项目应用1 智能手表之更新时间 #3
  • Linux系统常用命令
  • 浅析飞算JavaAI “撤回需求” 功能:让需求管理更灵活
  • 【C++】类和对象(中)
  • 【三桥君】Windows系统如何临时关闭“Windows安全中心实时保护”?解析Win10和Win11关闭方法
  • C++中std::string和std::string_view使用详解和示例
  • Lua(字符串)
  • 生成式人工智能展望报告-欧盟-03-经济影响
  • pyautogui 置信度问题
  • 拖拽同时支持Y轴滚动