【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

news/2024/9/23 8:14:49/

在这里插入图片描述

文章目录

  • 一、说明
  • 二、导入依赖
  • 三、集成Spring框架中
  • 四、编写Service
  • 五、编写Controller
  • 六、编写queryAllByPage页面展示数据


一、说明

什么是分页

在这里插入图片描述

​ 针对分页,使用的是PageHelper分页插件,版本使用的是5.1.8

​ 参考文档

PageHelper_24">PageHelper介绍

PageHelper是适用于MyBatis框架的一个分页插件,它支持基本主流与常用的数据库,如MySQL、Oracle、MariaDB、SQLite、Hsqldb等。

特性

简单易用: PageHelper 提供了简单的配置方式,可以轻松地在 MyBatis 中启用分页功能。
支持多种数据库: PageHelper 支持多种数据库,包括 MySQL、Oracle、PostgreSQL、SQL Server 等。
丰富的功能: PageHelper 提供了丰富的功能,包括基本的分页查询、排序、物理分页、内存分页等。
可定制化: PageHelper 提供了丰富的配置选项,可以根据实际需求进行定制。

使用步骤

引入 PageHelper 依赖:在 Maven 或者 Gradle 项目中引入 PageHelper 的依赖。
配置 PageHelper:在 MyBatis 的配置文件中配置 PageHelper 插件,指定数据库类型和方言。
分页查询:在需要进行分页查询的方法中,使用 PageHelper.startPage 方法指定分页参数。
获取分页结果:通过 PageHelper 提供的 PageInfo 类来获取分页结果。

PageHelper的使用方式非常便捷,可以在原始SQL查询语句之前添加PageHelper.startPage(pageNum, pageSize);来启动分页。在查询结束后,通过PageInfo对象可以获取分页信息,如总记录数、总页数、每页大小等。

PageHelper的实现原理基于拦截器(Interceptor),在执行相关SQL之前会拦截并做分页处理。通过ThreadLocal机制,将分页参数保存在当前线程中,确保了分页参数的安全性和准确性。

PageHelper还提供了丰富的配置选项和自定义功能,可以根据实际需求进行灵活配置和使用。例如,可以配置是否支持带有“for update”的查询语句,是否支持嵌套查询等。

总的来说,PageHelper是一款功能强大且易于使用的分页插件,适用于MyBatis框架的分页处理,可以大大简化开发人员的工作量,提高开发效率。

二、导入依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.8</version>
</dependency>

三、集成Spring框架中

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mappers/*.xml"/><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><value>helperDialect=mysqlreasonable=truepageSizeZero=true</value></property></bean></array></property>
</bean>

四、编写Service

​ 个人习惯:我的习惯是把分页功能定义到业务层,也就是Service层中,当然你也把分页功能实现在Controller层中。

public interface AccountService {// 带分页查询public PageInfo<Account> queryAllByPage(Integer currentPage,Integer pageSize);
}
@Service
public class AccountServiceImpl implements AccountService {@Overridepublic PageInfo<Account> queryAllByPage(Integer currentPage, Integer pageSize) {PageHelper.startPage(currentPage,pageSize);List<Account> accounts = accountMapper.selectAll();PageInfo<Account> pageInfo = new PageInfo<Account>(accounts);return pageInfo;}
}

五、编写Controller

@Controller
public class AccountController {@Autowiredprivate AccountService accountService;@RequestMapping(value = "/queryAllByPage")public String queryAllByPage(@RequestParam(name = "currentPage",required = true,defaultValue = "1")Integer currentPage, Model model){PageInfo<Account> pageInfo = accountService.queryAllByPage(currentPage , 10);model.addAttribute("pageInfo",pageInfo);return "queryAllByPage";}
}

六、编写queryAllByPage页面展示数据

<%@ page pageEncoding="UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html><body><c:forEach items="${pageInfo.list}" var="account">${account.name} <br/></c:forEach><c:forEach begin="1" end="${pageInfo.pages}" step="1" var="currentPage"><a href="">第${currentPage}</a></c:forEach><br/>当前页:${pageInfo.pageNum} <br/>总记录数:${pageInfo.total} <br/>总页数:${pageInfo.pages} <br/>导航页码数:${pageInfo.navigatePages} <br/><c:forEach items="${pageInfo.navigatepageNums}" var="currentPage"><a href="${pageContext.request.contextPath}/queryAllByPage?currentPage=${currentPage}">第${currentPage}</a></c:forEach></body>
</html>

在这里插入图片描述


http://www.ppmy.cn/news/1452420.html

相关文章

痉挛性斜颈患者改掉这些不良习惯,康复就不远了!

痉挛性斜颈&#xff0c;一种不容忽视的神经系统疾病&#xff0c;正在影响着全球数百万人的生活。它不仅仅是一种身体上的病痛&#xff0c;更是一种精神上的折磨。对于患者而言&#xff0c;除了寻求专业的医学治疗外&#xff0c;日常生活中的一些不良习惯也可能成为他们康复道路…

python在Django中,模板加载器(Template Loaders)是负责查找和加载模板文件的组件

在Django中,模板加载器(Template Loaders)是负责查找和加载模板文件的组件。Django默认使用django.template.loaders.filesystem.Loader和django.template.loaders.app_directories.Loader这两个加载器,它们分别用于从文件系统和Django应用目录下的templates子目录中加载模…

01-MySQL 基础篇笔记

一、MySQL 概述 1.1 数据库相关概念 数据库&#xff1a;&#xff08;DB&#xff1a;DataBase&#xff09; 存储数据的仓库&#xff0c;数据是有组织的进行存储 数据库管理系统&#xff1a;&#xff08;DBMS&#xff1a;DataBase Management System&#xff09; 操作和管理数…

C++ | Leetcode C++题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* rotateRight(ListNode* head, int k) {if (k 0 || head nullptr || head->next nullptr) {return head;}int n 1;ListNode* iter head;while (iter->next ! nullptr) {iter iter->next;n…

机器学习笔记-22

终章 至此吴恩达老师的机器学习课程已经完成啦&#xff0c;总结一下&#xff1a; 1.监督学习的算法&#xff1a;线性回归、逻辑回归、神经网络和向量机 2.无监督学习的算法&#xff1a;K-Means、PCA、异常检测 3.推荐系统、大规模数据处理、正则化、如何评估算法 4.上限分析、…

Nginx(参数设置总结)

文章目录 Nginx&#xff08;工作机制&参数设置&#xff09;1.Master&Worker工作机制1.示意图2.解释3.Nginx争抢机制4.accept_mutex解决惊群现象5.多进程结构不用多线程结构的好处6.IO多路复用&#xff0c;实现高并发7.优势 2.参数配置1.work_processes1.基本介绍2.work…

Web安全测试实战:SQL注入与XSS攻击的检测与防御

摘要&#xff1a; 在网络安全领域&#xff0c;SQL注入和跨站脚本&#xff08;XSS&#xff09;攻击是两大主要威胁&#xff0c;它们可以导致数据泄露、会话劫持甚至整个系统的破坏。本文将通过具体的代码示例、测试步骤和防御策略&#xff0c;展示如何检测和防御这两种攻击&…

python学习笔记B-20:序列实战--处理千年虫

将2位数表达的年份&#xff0c;转换为用4位数表达&#xff1a; print("将列表中的2位数年份转换为4位数年份") lst[88,89,90,00,99] print(lst) for index in range(len(lst)):if len(str(lst[index]))2:lst[index] 1900int(lst[index])elif len(str(lst[index]))1…