Springboot整合mybatis-plus使用pageHelper进行分页

server/2024/12/20 2:06:32/

PageHelper 使用步骤全解析 

在进行 Web 应用开发时,经常会涉及到数据库数据的分页展示。PageHelper 是一个非常实用的 MyBatis 分页插件,它能够方便地实现数据库查询结果的分页功能,极大地提高了开发效率。以下将简单介绍 PageHelper 的使用步骤。 

一、引入依赖

Maven 项目

如果你的项目是基于 Maven 构建的,需要在项目的pom.xml文件中添加 PageHelper 的依赖项。 

<!--pagehelper分页插件-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.0</version>
</dependency>

Gradle 项目 

对于 Gradle 项目,在build.gradle文件中添加以下依赖:

implementation 'com.github.pagehelper:pagehelper-spring-boot-starter:1.4.0'

二、配置 PageHelper

  • 如果是 Spring Boot 项目,在application.propertiesapplication.yml文件中进行配置。以application.yml为例:
pagehelper:helper-dialect: mysql # 指定数据库方言,这里以MySQL为例reasonable: true # 分页合理化,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页support-methods-arguments: true # 支持通过Mapper接口参数传递分页参数params: count=countSql # 用于从对象中根据属性名取值,这里配置count的SQL

这些参数的详细解释如下:

  • helper-dialect: 指定分页插件的数据库方言。PageHelper会自动检测当前的数据库链接,自动选择合适的分页方式。如果你使用的是MySQL,可以明确指定为mysql

  • reasonable: 是否启用分页合理化。如果启用,当pageNum<1时,会自动查询第一页的数据,当pageNum>pages时,自动查询最后一页数据;不启用的情况下,以上两种情况都会返回空数据。

  • support-methods-arguments: 是否支持通过Mapper接口参数来传递分页参数,默认值false。设置为true时,PageHelper会从查询方法的参数值中自动根据配置的字段取值,进行分页。

  • params: 用于从对象中根据属性名取值,可以配置pageNum, pageSize, count, pageSizeZero, reasonable等参数。这里的count=countSql表示在执行分页查询时,会使用countSql作为计算总数的SQL。

 三、在代码中使用 PageHelper

1.简单分页查询

假设我们有一个用户表(user),要查询并分页展示用户信息。首先,在对应的 Mapper 接口中定义查询方法:

java">import com.example.entity.User;
import java.util.List;public interface UserMapper {@Select("SELECT * FROM user")List<User> selectAllUsers();
}
  • 然后,在 Service 层或调用 Mapper 的地方使用 PageHelper 进行分页查询,示例代码如下:
java">import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.example.mapper.UserMapper;
import com.example.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public PageInfo<User> getUserList(int pageNum, int pageSize) {// 设置分页参数,pageNum为当前页码,pageSize为每页显示的记录数PageHelper.startPage(pageNum, pageSize);// 执行查询List<User> userList = userMapper.selectAllUsers();// 使用PageInfo对查询结果进行包装,返回包含分页信息的对象return new PageInfo<>(userList);}
}
  • 在上述代码中,PageHelper.startPage(pageNum, pageSize)方法用于设置分页参数,告诉 PageHelper 要查询第几页以及每页显示多少条记录。然后执行查询操作,PageHelper 会自动对查询语句进行分页处理,最后将查询结果包装成PageInfo对象返回。PageInfo对象包含了分页相关的各种信息,如总记录数、总页数、当前页码、每页记录数等,方便在前端进行分页展示和相关逻辑处理。

 2.带条件的分页查询

 如果查询需要带条件,例如根据用户姓名进行模糊查询并分页。首先在 Mapper 接口中定义带条件的查询方法:

java">import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE user_name LIKE #{name}")List<User> selectUsersByName(@Param("name") String name);
}
  • 在 Service 层实现带条件的分页查询,代码如下:
java">import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.example.mapper.UserMapper;
import com.example.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public PageInfo<User> getUserListByName(String name, int pageNum, int pageSize) {// 设置分页参数PageHelper.startPage(pageNum, pageSize);// 执行带条件的查询List<User> userList = userMapper.selectUsersByName("%" + name + "%");// 返回分页信息对象return new PageInfo<>(userList);}
}

 这样我们就能简单的使用pageHelper的分页功能 ,详细的使用可以参考文档如何使用分页插件

 

 

 

 

 

 


http://www.ppmy.cn/server/151587.html

相关文章

libevent-Reactor设计模式【1】

一、Libevent概述 1、简介 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&#…

0005.基于SpringBoot+LayUI客户关系管理系统

适合初学同学练手项目&#xff0c;部署简单&#xff0c;代码简洁清晰&#xff1b; 愿世界和平再无bug 项目介绍 CRM是指客户关系管理系统 。该系统主要利用SpringBootLayUI实现&#xff0c;项目的核心模块包括基础模块、营销管理模块、权限管理模块、客户管理模块、服务管理和统…

黑客如何找到App中的源IP:原理与防范

在移动互联网时代&#xff0c;应用程序&#xff08;App&#xff09;已经成为人们生活中不可或缺的一部分。然而&#xff0c;随着App的广泛应用&#xff0c;安全问题也日益受到关注。其中&#xff0c;源IP泄露是一个潜在的安全风险&#xff0c;可能导致服务器遭受攻击、敏感信息…

C语言动态内存管理【进阶--5--】

文章目录 [toc] 动态内存管理一、作用即意义二、动态内存函数的介绍Ⅰ、malloc()函数、free()函数Ⅱ、calloc()函数Ⅲ、realloc()函数 三、常见的动态内存错误Ⅰ、对NULL指针的解引用操作Ⅱ、对动态开辟空间的越界访问Ⅲ、对非动态开辟的内存使用free释放Ⅳ、使用free释放动态开…

Three.js案例-360° VR看房

在 360 看房功能中&#xff0c;我们需要在浏览器中创建一个类似虚拟现实的场景&#xff0c;使得用户能够查看环境的每一个角落。这一功能的实现本质上是利用 球体映射技术&#xff0c;即通过将全景图作为纹理贴图映射到一个反向的球体上&#xff0c;用户可以通过旋转视角来“环…

架构实践03-高可用架构模式

零、文章目录 架构实践03-高可用架构模式 1、CAP 定理 &#xff08;1&#xff09;CAP 定理的背景 提出者&#xff1a;加州大学伯克利分校的埃里克布鲁尔&#xff08;Eric Brewer&#xff09;在2000年ACM PODC会议上提出。证明者&#xff1a;麻省理工学院的赛斯吉尔伯特&…

【Java基础面试题015】Java中wait()和sleep()的区别?

重点回答 wait()和sleep()都是用于暂停线程的操作&#xff0c;但他们有明显的区别&#xff08;先说面试官最关心的&#xff09;&#xff1a; 1&#xff09;使用要求不同 wait()方法必须在同步代码块或同步方法内使用&#xff0c;否则抛异常。wait()依赖于锁对象管理线程的等…

基于Spring Boot的体育商品推荐系统

一、系统背景与目的 随着电子商务的快速发展和人们健康意识的提高&#xff0c;体育商品市场呈现出蓬勃发展的态势。然而&#xff0c;传统的体育商品销售方式存在商品种类繁多、用户选择困难、个性化需求无法满足等问题。为了解决这些问题&#xff0c;基于Spring Boot的体育商品…