首页 > 其他分享 >SpringBoot中分页插件PageHelper的使用

SpringBoot中分页插件PageHelper的使用

时间:2024-05-02 17:34:24浏览次数:21  
标签:插件 分页 pageSize List PageHelper PageInfo Page SpringBoot

SpringBoot如何使用PageHelper实现分页查询

在原始的分页查询方法中,需要编写复杂的SQL语句来限制查询结果的范围,通常需要使用LIMIT或者ROWNUM等数据库特定的语法来实现分页。在每个需要分页的查询方法中,都需要手动计算分页的起始位置和偏移量,通常需要根据页码和每页数量来计算,这部分代码会在不同的查询方法中重复出现。

原始分页方法

  1. Controller
    //原始分页方法
    @GetMapping("/chapter01/primitive")
    public List<UserEntity> chapter01(@RequestParam Integer pageNum, @RequestParam Integer pageSize){
        HashMap<String,Integer> map = new HashMap<>();
        map.put("offset",(pageNum-1)*pageSize);
        map.put("count",pageSize);
        return chapter01Mapper.findAll(map);
    }
  1. Mapper接口
public interface Chapter01Mapper {
    List<UserEntity> findAll(HashMap<String,Integer> map);
}
  1. Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.Mapper.Chapter01Mapper">
    <resultMap id="UserResultMap" type="com.example.Chapter01.UserEntity">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="phone" column="phone"/>
        <result property="address" column="address"/>
    </resultMap>

    <sql id="baseSQL">
        select * from `table`
    </sql>
    <!-- 手动配置分页 -->
    <select id="findAll" parameterType="HashMap" resultMap="UserResultMap">
        <include refid="baseSQL"/>
        <if test="offset != null and count != null">
         limit #{offset},#{count}
        </if>
    </select>
</mapper>

使用PageHelper

  1. 导入依赖
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.6</version>
</dependency>
  1. controller
    //PageHelper插件方法
    @GetMapping("/chapter01/pageHelper")
    public PageInfo<UserEntity> chapter02(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize){
        PageHelper.startPage(pageNum,pageSize);
        List<UserEntity> list =chapter01Mapper.findAllByPage();
        return new PageInfo<>(list);
    }
  1. mapper接口
public interface Chapter01Mapper {
    List<UserEntity> findAllByPage();
}
  1. mapper.xml
    <!-- 省略 -->
    <!-- PageHelper分页 -->
    <select id="findAllByPage" resultMap="UserResultMap">
        <include refid="baseSQL"/>
    </select>

在使用PageHelper进行分页时,PageHelper.startPage(pageNum,pageSize)是开启分页功能的关键代码,通过传入当前页码和页面记录显示数即可自动计算分页相关的属性,并将计算出的所有数据封装在Page对象内,Page继承自ArrayList,所以后续不仅可以得到查询列表还可以通过调用Page的暴露方法得到Page内部与分页相关的数据,比如页码、页面大小、起始行、末行、总数、总页数、排序等。但实际上想要一次性返回所有关键性信息可以使用PageInfo对象,PageInfo包含的分页信息比Page更全,对于前端来说返回的数据更加完整规范,在例子中使用PageInfo的构造方法传入page对象将page转换为PageInfo返回,也可通过Page的toPageInfo方法直接转换。

小结

调试的时候发现在执行List<UserEntity> list =chapter01Mapper.findAllByPage();后,本应返回的List类型实际上被修改为Page。看了下源码和查阅资料得到一些粗糙简单的结论:

  • 在MyBatis集成PageHelper的情况下,当调用chapter01Mapper.findAllByPage()方法时,PageHelper会在该方法执行前拦截并进行一些处理,其中之一就是开启分页,PageHelper通过AOP(面向切面编程)的方式,在findAllByPage()方法执行前动态地修改其行为,比如SQL语句后添加分页语句,以实现分页功能,并将结果封装成一个Page对象。

标签:插件,分页,pageSize,List,PageHelper,PageInfo,Page,SpringBoot
From: https://www.cnblogs.com/chuimber/p/18170359

相关文章

  • [springboot]配置文件加载顺序
    一般项目直接使用.jar文件以server.port配置举例;以jar包内和jar包外说明内部和外部配置文件顺序由高到底,如下:外部-启动时指定参数外部-环境变量外部config/yml文件外部yml文件内部config/yml文件内部yml文件启动时,如果指定了激活的profile文件,会优先找激活的profile文......
  • [springboot] application.yml是变灰色的,不支持输入提示
       检查是否存在插件:springbootassistant,springbootFile->Setting; plugins,查看右侧“Installed”不存在则安装springbootassistant默认插件中如果没有找到springbootassistant,安装springassistant插件效果如下,显示为有绿色的图标 内容也支持输入提示......
  • [springboot]一启动就自动停止了
    刚刚新建的springboot项目,启动日志显示成功了,但是服务却自动停了。 一种常见的问题是缺少必要的依赖项:SpringBootWeb添加maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.7.R......
  • [POM]idea安装pom文件maven依赖查询插件
    安装前: 安装:Fle->Setting plugin->marketplace搜索“”mavenhelper“”,点击install 安装后,下方多了“DependencyAnalyzer”,支持查看全部依赖、依赖冲突,依赖树,过滤  ......
  • 1. SpringBoot 入门
    1.SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,可以帮助我们开发基于Spring的、独立的、生产级的应用程序。​其中SpringBoot的官网是:SpringBootReferenceDocumentationSpringBoot的主要目标是:为所有Spring开发提供更快的入门体验开箱即用,提供了自动配......
  • SpringBoot Jpa多条件查询
    RepositoryMyRepositoryextendsJpaRepository<MyEntity,Integer>精确查询:Example包装EntityPageablepageable=PageRequest.of(current-1,pageSize);//myEntity实体类参数Exampleexample=Example.of(myEntity);Page<MyEntity>page=myRepository.fin......
  • SpringBoot 打包所有依赖
    SpringBoot项目打包的时候可以通过插件spring-boot-maven-plugin来repackage项目,使得打的包中包含所有依赖,可以直接运行。例如:<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId&g......
  • SpringBoot 循环引用解决办法
    Spring原生是允许并解决了单层循环引用的,但从SpringBoot2.6.0开始,默认禁止Bean之间的循环引用,如果存在循环引用就会启动失败报错。此时要解决循环引用问题有两个办法:设置Spring允许循环引用(推荐)。spring:main:allow-circular-references:true在循环引用......
  • zotero添加markdown插件(Mac版)
    zotero安装官网下载地址:https://www.zotero.orgmarkdown插件下载下载地址:https://gitcode.com/fei0810/markdownhere4zotero/tree/master选择相应的.xpi文件插件安装步骤打开zotero,选择工具->附加组件选择installadd-onfromfile选中刚才下载的.xpi文件点......
  • SpringBoot camunda常用代码
    图例: 1:默认排他网关,表达式Type:expression:${number%200==0}2:servicetask(系统自动执行用的最多):常用Delegateexpression${testGateWay}举例:@Component("testGateWay")publicclassTestGateWayimplementsJavaDelegate{@Overridepublicvoidexecute......