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 时,主要涉及到两个类:Page
和 PageInfo
。
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
类型的分页查询结果设计,提供了一些额外的便利方法,如获取导航页码列表等。
通过使用 Page
和 PageInfo
,PageHelper 插件使得在 MyBatis 中实现分页查询变得非常简单和直观。