mybatis使用pagehelper插件,封装pageBean减少默认的分页参数

1.使用示例

引入pagehelper依赖:

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

PageBean:

package com.edu.utils;

import java.io.Serializable;
import java.util.List;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean<T> implements Serializable {
    private static final long serialVersionUID = -9202109574544652243L;
    private long totalCount;        //总记录数
    private List<T> list;    //结果集
    private int pageNo;    // 第几页
    private int pageSize;    // 每页记录数

    public PageBean(List<T> list) {
        PageInfo page = new PageInfo<>(list);
        this.pageNo = page.getPageNum();
        this.pageSize = page.getPageSize();
        this.totalCount = page.getTotal();
        this.list = page.getList();
    }

}

controller:

 @GetMapping("/viewAllLeave")
    public Result viewAllLeave(@RequestParam(value = "page",defaultValue = "1") int page,
                               @RequestParam(value = "size",defaultValue = "10") int size,
                               @RequestBody StuAttendanceSelDto selDto){

        List<LeaveApplications> leaveApplications = adminService.viewAllLeave(page,size,selDto);
        //PageInfo就是一个分页Bean
        PageBean pageBean =new PageBean(leaveApplications);
        return Result.success(pageBean);
    }

serviceImpl:

    @Override
    public List<LeaveApplications> viewAllLeave(int page, int size, StuAttendanceSelDto selDto) {
        PageHelper.startPage(page, size);
        return adminMapper.viewAllLeave(selDto);
    }

mapper.xml:

<select id="viewAllLeave" resultType="com.edu.entity.LeaveApplications">
        SELECT student.student_id,start_time,end_time,reason,leave_status as status,
        submit_time,student_name,head_teacher as classTeacher,class_name
        ,class.class_id
        FROM leave_applications,student,class
        WHERE
        <if test="studentName != null and studentName != ''">
            student.student_name like #{studentName} AND
        </if>
        <if test="studentId != null and studentId != ''">
            student.student_id = #{studentId} AND
        </if>
        <if test="classId != null and classId != ''">
            class.class_id = #{classId} AND
        </if>
        <if test="headTeacher != null and headTeacher != ''">
            class.head_teacher = #{headTeacher} AND
        </if>
        <if test="status != null and status != ''">
            leave_status = #{status} AND
        </if>
        <if test="beginTime != null and endTime != null">
            submit_time BETWEEN #{beginTime} AND #{endTime} AND
        </if>
        class.class_id=student.class_id
        AND leave_applications.student_id=student.student_id
        and student.student_id=leave_applications.student_id
    </select>

总结:

1.在service的实现层方法中增加:

 PageHelper.startPage(page, size);

他将对紧随其后的一条sql语句进行分页,在sql语句中不需要做任何处理。

2.在controller中接口分页参数,并将结果用pageBean封装

3.封装pageBean

封装时要注意page类和pageInfo类的区别

2.pagehelper插件中的page类和pageInfo类

PageHelper 是一个 MyBatis 分页插件,它极大地简化了分页操作。在使用 PageHelper 时,主要涉及到两个类:PagePageInfo

1. Page

Page 是 PageHelper 中的一个核心类,用于封装分页查询的结果。它是一个泛型类,通常与 List 一起使用,表示分页查询返回的记录列表。

主要属性和方法

  • records:当前页的记录列表。
  • total:总记录数。
  • pages:总页数。
  • size:每页的记录数。
  • number:当前页码。
  • isFirstPage:是否是第一页。
  • isLastPage:是否是最后一页。
  • hasNextPage:是否有下一页。
  • hasPreviousPage:是否有上一页。

使用示例

PageHelper.startPage(1, 10); // 设置分页参数,从第1页开始,每页10条记录
List<User> users = userMapper.selectAll(); // 执行分页查询
Page<User> page = (Page<User>) users;
System.out.println("总记录数: " + page.getTotal());
System.out.println("总页数: " + page.getPages());
System.out.println("当前页码: " + page.getNumber());
System.out.println("是否有下一页: " + page.isHasNextPage());

2. PageInfo

PageInfo 是 PageHelper 的另一个核心类,它是 Page 类的子类,专门用于封装 List 类型的分页查询结果。PageInfo 提供了一些额外的方法和属性,使得分页信息的展示更加方便。

主要属性和方法

  • getList():获取当前页的记录列表。
  • getTotal():获取总记录数。
  • getPages():获取总页数。
  • getSize():获取每页的记录数。
  • getCurrentPage():获取当前页码。
  • isIsFirstPage():是否是第一页。
  • isIsLastPage():是否是最后一页。
  • isHasNextPage():是否有下一页。
  • isHasPreviousPage():是否有上一页。
  • getNavigatePages():获取导航页码列表。
  • getNavigateFirstPage():获取导航第一页。
  • getNavigateLastPage():获取导航最后一页。

使用示例

PageHelper.startPage(1, 10); // 设置分页参数
List<User> users = userMapper.selectAll(); // 执行分页查询
PageInfo<User> pageInfo = new PageInfo<>(users);
System.out.println("总记录数: " + pageInfo.getTotal());
System.out.println("总页数: " + pageInfo.getPages());
System.out.println("当前页码: " + pageInfo.getCurrentPage());
System.out.println("是否有下一页: " + pageInfo.isHasNextPage());
System.out.println("导航页码列表: " + Arrays.toString(pageInfo.getNavigatePages()));

区别和联系

  • 联系PageInfo 继承自 Page,因此它包含了 Page 所有属性和方法。
  • 区别PageInfo 专门为 List 类型的分页查询结果设计,提供了一些额外的便利方法,如获取导航页码列表等。

通过使用 PagePageInfo,PageHelper 插件使得在 MyBatis 中实现分页查询变得非常简单和直观。

相关推荐

  1. Mybatis-plusPageHelper两种不同使用方式

    2024-07-17 23:18:05       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 23:18:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 23:18:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 23:18:05       58 阅读
  4. Python语言-面向对象

    2024-07-17 23:18:05       69 阅读

热门阅读

  1. QTablewidget开发详解

    2024-07-17 23:18:05       22 阅读
  2. springboot防止重复提交的方案有哪些

    2024-07-17 23:18:05       18 阅读
  3. Bigdata-Docker构建大数据学习开发环境

    2024-07-17 23:18:05       18 阅读
  4. Flutter实战小案例

    2024-07-17 23:18:05       21 阅读
  5. 【读书笔记】训练自己的数据集yolov8

    2024-07-17 23:18:05       22 阅读
  6. C#自定义异常(Exception)的实现

    2024-07-17 23:18:05       24 阅读
  7. JDK 方法中的小坑

    2024-07-17 23:18:05       19 阅读
  8. LVS集群简介

    2024-07-17 23:18:05       21 阅读
  9. 类和对象-多态-纯虚函数和抽象类

    2024-07-17 23:18:05       19 阅读
  10. 建筑产业网元宇宙的探索与实践

    2024-07-17 23:18:05       21 阅读
  11. 微信小程序加载动画文件

    2024-07-17 23:18:05       26 阅读