MyBatis之分页查询:MyBatis PageHelper

news2024/11/25 4:47:53

MyBatis之分页查询:MyBatis PageHelper

简介

  • MyBatis,作为目前流行的ORM框架,大大方便了日常开发。而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐。而MyBatis PageHelper的出现,则解决了这一痛点。这里将介绍如何在Spring Boot、MyBatis的环境中通过MyBatis PageHelper高效方便的实现分页查询

配置

  • 添加Maven依赖

  • <!--MyBatis 分页插件: MyBatis PageHelper-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.5</version>
    </dependency>
    
  • 添加配置

  • 在application.properties配置文件中添加MyBatis PageHelper的配置项

  • # PageHelper 分页插件配置
    pagehelper.helperDialect=mysql
    pagehelper.reasonable=true
    pagehelper.supportMethodsArguments=true
    pagehelper.params=count=countSql
    

分页查询

  • 通过 MyBatis PageHelper 进行分页查询实际上非常简单,只需在service(或mapper)方法执行查询前,调用一次 PageHelper.startPage(pageNum,pageSize) 来设置分页查询参数即可,其中pageNum 为记录页数,pageSize 为单页记录数量。此时service(或mapper)方法的查询结果就是分页后的结果了。如果期望获得相关的分页信息,还可以将查询结果封装到PageInfo对象中,以获得总页数、总记录数、当前页数等相关分页信息

  • 现在通过一个实际示例,来具体演示操作,这里我们提供了一个分页查询的Controller

  • /**
     * 分页查询
     * @param pageNum 记录页数
     * @param pageSize 单页记录数量
     * @return
     */
    @ResponseBody
    @RequestMapping("/findPage")
    public List<Student> findPage(@RequestParam int pageNum, @RequestParam int pageSize) {
        // 设置分页查询参数
        PageHelper.startPage(pageNum,pageSize);
        List<Student> studentList = studentService.findList();
    
        for(Student student : studentList) {
            System.out.println("element : " + student);
        }
    
        // 封装分页查询结果到 PageInfo 对象中以获取相关分页信息
        PageInfo pageInfo = new PageInfo( studentList );
        System.out.println("总页数: " + pageInfo.getPages());
        System.out.println("总记录数: " + pageInfo.getTotal());
        System.out.println("当前页数: " + pageInfo.getPageNum());
        System.out.println("当前页面记录数量: " + pageInfo.getSize());
    
        return pageInfo.getList();
    }
    
  • service方法中所调用的查询SQL如下所示,可以看到,SQL中无需使用limit语句

  • ...
        <resultMap id="studentResultMap" type="com.aaron.springbootdemo.pojo.Student">
            <id property="id" column="id" jdbcType="INTEGER"/>
            <result property="username" column="username" jdbcType="VARCHAR"/>
            <result property="sex" column="sex" jdbcType="VARCHAR"/>
            <result property="address" column="address" jdbcType="VARCHAR"/>
        </resultMap>
    
        <select id="findList" parameterType="String" resultMap="studentResultMap">    
            SELECT * FROM user
        </select>
        ...
    
  • 测试结果如下所示,查询第一页:

  • img

  • 查询第二页:

  • img

  • Note

  • PageHelper.startPage(pageNum,pageSize) 只对其后的第一次SQL查询进行分页。故若需进行分页查询,必须每次在service(或mapper)方法执行SQL查询前调用PageHelper.startPage(pageNum,pageSize) 方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在postman中实现自动化测试?

这里简单演示在postman中怎样实现自动化测试&#xff08;不涉及到用户登录的token认证&#xff09; 导入测试用例文件&#xff0c;测试web接口 postman使用流程&#xff1a;创建collection文件夹&#xff0c;在该文件夹中创建post&#xff0c;get请求&#xff1b;其中传入的参…

Keil MDK-ARM 软件的部分常用快捷键如下

F7&#xff1a;编译。F8: 下载。F9&#xff1a;添加/取消断点。Ctrl F5&#xff1a;调试。Tab&#xff1a;将选中的内容整体右移。Shift Tab&#xff1a;将选中的内容整体左移。Home&#xff1a;将光标移至行首。End&#xff1a;将光标移至行末。Ctrl >&#xff1a;光标…

【SpringMVC】注解、参数传递、返回值和页面跳转的关键步骤

目录 引言 一、常用注解 1.1.RequestMapping 1.2.RequestParam 1.3.RequestBody 1.4.RequestHeader 1.5.PathVariable 二、参数传递 2.1.基础类型String 2.2.复杂类型 2.3.RequestParam 2.4.PathVariable 2.5.RequestBody 2.6.RequestHeader 三、返回值 3.1.vo…

大数据-玩转数据-Flink状态编程(中)

一、键控状态 键控状态是根据输入数据流中定义的键&#xff08;key&#xff09;来维护和访问的。 Flink为每个键值维护一个状态实例&#xff0c;并将具有相同键的所有数据&#xff0c;都分区到同一个算子任务中&#xff0c;这个任务会维护和处理这个key对应的状态。当任务处理…

Jmeter压测监控体系搭建Docker+Influxdb+Grafana

章节目录&#xff1a; 一、背景介绍1.1 概述1.2 拓扑图 二、云服务器设置三、Docker3.1 概述3.2 搭建流程3.3 安装验证3.4 配置docker镜像加速3.5 取消sudo运行(可选操作) 四、InfluxDB4.1 镜像拉取4.2 运行数据库4.3 创建存储 jmeter 数据的库 五、Grafana5.1 镜像拉取5.2 关联…

Day_13 > 指针进阶(2)

目录 1.函数指针数组 2.指向函数指针数组的指针 3.回调函数 qsort()函数 代码示例 void* 4.结束 今天我们在进阶指针的基础上&#xff0c;学习进阶指针的第二部分 1.函数指针数组 首先我们回顾一下指针数组 char* arr[5]://字符指针数组 - 数组 - 存放的是字符指针 in…

mysql的索引结构

索引概述 索引&#xff08; index &#xff09;是帮助 MySQL 高效获取数据的数据结构 ( 有序 ) 。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就可以在这些…

Spring与OAuth2:实现第三方认证和授权的最佳实践

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

python基本类型

数值类型 整型 int_val 1145143 print(int_val)python中的整型是大数类型。 一些其他函数 val 30 vlen val.bit_length() # 转换为二进制的长度 v_8 oct(val) print(v_8) # 将十进制转为八进制 v_16 hex(val) # 将十进制转为十六进制 v_2 bin(val) # 将十进制转为二进…

二、环境配置,项目运行 —— TinyWebServer

环境配置&#xff0c;项目运行 —— TinyWebServer 一、前言 上一期已经介绍过这个项目的基本结构&#xff0c;不懂得可以点开主页查找。 写代码前。一般的步骤就是&#xff0c;先把别人的代码下载下来运行。一、一方面看看最终效果是否是自己想要的&#xff0c;二、掌握项目…

redis分布式锁详解

一、基本分布式锁实现 1、案例&#xff08;扣减库存&#xff09; RequestMapping("reduceStock")public String reduceStock() {String lockKey "lock:product_101";String clientId UUID.randomUUID().toString();// 过期时间要和设置key成为一条命令…

linux下shell脚本实现wordpress搭建

wordpress_auto_install.sh #!/bin/bashuser$(whoami)function wordpress_auto_install () { if [ $user "root" ];thenecho "前提&#xff1a;调整系统配置&#xff0c;如关闭selinux、firewall等&#xff01;"sed -i s/SELINUXenforcing/SELINUXdis…

光线投射之伪3d

光线投射是一种在 2D 地图中创建 3D 透视的渲染技术。当计算机速度较慢时&#xff0c;不可能实时运行真正的 3D 引擎&#xff0c;光线投射是第一个解决方案。光线投射可以非常快&#xff0c;因为只需对屏幕的每条垂直线进行计算。 光线投射的基本思想如下&#xff1a;地图是一…

rtthread下基于spi device架构MCP25625驱动

1.CAN驱动架构 由于采用了RTT的spi device架构&#xff0c;不能再随心所遇的编写CAN驱动 了&#xff0c;之前内核虽然采用了RTT内核&#xff0c;但是驱动并没有严格严格按RTT推荐的架构来做&#xff0c;这次不同了&#xff0c;上次是因为4个MCP25625挂在了4路独立的SPI总线上&…

【图论】Floyd

算法提高课笔记&#xff09; 文章目录 例题牛的旅行题意思路代码 排序题意思路代码 观光之旅题意思路代码 例题 牛的旅行 原题链接 农民John的农场里有很多牧区&#xff0c;有的路径连接一些特定的牧区。 一片所有连通的牧区称为一个牧场。 但是就目前而言&#xff0c;你…

程序依赖相关知识点(PDG,SDG)

什么叫可达性 变量v的定义d&#xff1a;对变量v的赋值语句称为变量v的定义 变量v的使用&#xff1a;在某个表达式中引用变量v的值 当变量v被再次赋值时&#xff0c;上一次赋值对变量v的定义d就被kill掉了 如果定义d到点p之间存在一条路径&#xff0c;且在路径中定义d没有被…

Java 多线程系列Ⅵ(并发编程的五大组件)

JUC 组件 前言一、Callable二、ReentrantLock三、Atomic 原子类四、线程池五、Semaphore六、CountDownLatch 前言 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 标准库中的一个包&#xff0c;它提供了一组并发编程工具&#xff0c;本篇文章就介绍几组常见的 JUC 组…

汇川PLC学习Day2:编写检测IO端口状态程序

汇川PLC学习Day2&#xff1a;编写检测IO端口状态程序 一、 新增IO和模拟量模块 IO组态界面 模块参数设置 程序编写 想法是将DA模块的通道0接到AD模块的通道0&#xff0c;将DA模块的通道1接到AD模块的通道1&#xff0c;PLC本身发模拟量给自己PLC收模拟量转换&#xff0c;…

MySQL 8.0.25版本下载、安装及配置(Windows 10/11 64位)详细教程【超详细,保姆级教程!!!】

本文介绍关于windows 11如何安装配置MySQL 8.0.25版本的详细步骤 MySQL下载地址&#xff08;官网&#xff09; 一、下载MySQL 8.0.25 1、进入官网&#xff0c;选择版本 8.0.25 2、下载MySQL压缩包 3、下载完成后将压缩包解压至方便自己查找的位置&#xff08;切记&#xf…

Tensor数据转换为稀疏矩阵

Tensor数据转换为稀疏矩阵 一、稀疏矩阵 原文链接 常用的稀疏矩阵存储格式有COO&#xff0c;CSR/CSC&#xff0c;LIL 1.COO COO(Coordinate format )是最为简单的格式&#xff0c;以三元组的形式存储稀疏矩阵。记录矩阵中非零元素的数值和所在的行序号和列序号。形式为&am…