一、PageHelper 概述
- PageHelper 是一個優秀的 MyBatis 分頁插件,可以方便地在 Spring Boot 項目中使用 MyBatis 結合 PageHelper 實現分頁功能
二、PageHelper 引入
1、依賴引入
- pom.xml
<properties>...<postgresql.verison>42.5.6</postgresql.verison><mybatis.version>3.0.1</mybatis.version><pagehelper.version>1.4.3</pagehelper.version>
</properties>
<dependencies>...<!-- postgresql 驅動 --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>${postgresql.verison}</version></dependency><!-- mybatis 和 springboot 整合的起步依賴 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><!-- 分頁插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.version}</version></dependency>
</dependencies>
2、配置文件
- application.yml
mybatis:mapper-locations: classpath:/mapper/*.xml # 映射文件路徑config-location: classpath:/mybatis-config.xml # 核心配置文件路徑
- mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 設置駝峰標識 --><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 打印 SQL 語句 --><setting name="logImpl" value="STDOUT_LOGGING"/></settings><plugins><!-- 分頁插件 --><plugin interceptor="com.github.pagehelper.PageInterceptor"/></plugins>
</configuration>
3、準備數據
- 創建數據表
CREATE TABLE staff (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL,role VARCHAR(255),salary DECIMAL(10, 2)
);
- 插入數據
INSERT INTO staff (name, role, salary) VALUES
('張三', '項目經理', 25000.00),
('李四', '高級開發工程師', 18000.00),
('王五', '開發工程師', 15000.00),
('趙六', '測試工程師', 12000.00),
('錢七', 'UI設計師', 13000.00),
('孫八', '產品經理', 20000.00),
('周九', '運維工程師', 14000.00),
('吳十', '初級開發工程師', 10000.00),
('鄭十一', '數據庫管理員', 16000.00),
('王十二', '技術總監', 30000.00);
三、PageHelper 初識
1、基本介紹
- startPage 方法用于設置分頁參數,緊跟的第一個查詢方法會被分頁
static <E> Page<E> startPage(int pageNum, int pageSize)
參數 | 說明 |
---|---|
pageNum | 當前頁碼 |
pageSize | 每頁條數 |
2、具體實現
(1)Entity
- Staff.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Staff {private Integer id;private String name;private String role;private Double salary;
}
(2)Mapper
- StaffMapper.java
@Mapper
public interface StaffMapper {List<Staff> queryAll();
}
- StaffMapper.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.my.mapper.StaffMapper"><resultMap id="staffResultMap" type="com.my.model.db.Staff"><id column="id" property="id"/><result column="name" property="name"/><result column="role" property="role"/><result column="salary" property="salary"/></resultMap><select id="queryAll" resultMap="staffResultMap">SELECT *FROM staff</select>
</mapper>
(3)Test
// 設置分頁參數
PageHelper.startPage(1, 5);// 緊跟的第一個查詢方法會被分頁
List<Staff> staffs = staffMapper.queryAll();for (Staff staff : staffs) {System.out.println(staff);
}
# 輸出結果Staff(id=3, name=張三, role=項目經理, salary=25000.0)
Staff(id=4, name=李四, role=高級開發工程師, salary=18000.0)
Staff(id=5, name=王五, role=開發工程師, salary=15000.0)
Staff(id=6, name=趙六, role=測試工程師, salary=12000.0)
Staff(id=7, name=錢七, role=UI設計師, salary=13000.0)
四、PageInfo 分頁信息
1、基本介紹
-
PageHelper 提供了 PageInfo 類,用于封裝分頁信息
-
分頁信息包括當前頁碼、每頁條數、總頁數、總記錄數、是否為第一頁、是否為最后一頁等
2、演示
// 設置分頁參數
PageHelper.startPage(1, 5);// 緊跟的第一個查詢方法會被分頁
List<Staff> staffs = staffMapper.queryAll();// 包裝分頁信息
PageInfo<Staff> pageInfo = new PageInfo<>(staffs);for (Staff staff : staffs) {System.out.println(staff);
}int pageNum = pageInfo.getPageNum();
int pageSize = pageInfo.getPageSize();
int pageTotal = pageInfo.getPages();
long total = pageInfo.getTotal();
boolean isFirstPage = pageInfo.isIsFirstPage();
boolean isLastPage = pageInfo.isIsLastPage();System.out.println("pageNum: " + pageNum);
System.out.println("pageSize: " + pageSize);
System.out.println("pageTotal: " + pageTotal);
System.out.println("total: " + total);
System.out.println("isFirstPage: " + isFirstPage);
System.out.println("isLastPage: " + isLastPage);
# 輸出結果Staff(id=3, name=張三, role=項目經理, salary=25000.0)
Staff(id=4, name=李四, role=高級開發工程師, salary=18000.0)
Staff(id=5, name=王五, role=開發工程師, salary=15000.0)
Staff(id=6, name=趙六, role=測試工程師, salary=12000.0)
Staff(id=7, name=錢七, role=UI設計師, salary=13000.0)
pageNum: 1
pageSize: 5
pageTotal: 2
total: 10
isFirstPage: true
isLastPage: false
五、Page 類
1、基本介紹
-
可以使用 Page 類來接收結果
-
Page 對象本身就包含了分頁信息,不需要額外包裝成 PageInfo 對象
2、演示
(1)Mapper
- StaffMapper.java
Page<Staff> queryAll2();
- StaffMapper.xml
<select id="queryAll2" resultMap="staffResultMap">SELECT *FROM staff
</select>
(2)Test
PageHelper.startPage(1, 5);Page<Staff> page = staffMapper.queryAll2();for (Staff staff : page) {System.out.println(staff);
}int pageNum = page.getPageNum();
int pageSize = page.getPageSize();
int pageTotal = page.getPages();
long total = page.getTotal();System.out.println("pageNum: " + pageNum);
System.out.println("pageSize: " + pageSize);
System.out.println("pageTotal: " + pageTotal);
System.out.println("total: " + total);
# 輸出結果Staff(id=3, name=張三, role=項目經理, salary=25000.0)
Staff(id=4, name=李四, role=高級開發工程師, salary=18000.0)
Staff(id=5, name=王五, role=開發工程師, salary=15000.0)
Staff(id=6, name=趙六, role=測試工程師, salary=12000.0)
Staff(id=7, name=錢七, role=UI設計師, salary=13000.0)
pageNum: 1
pageSize: 5
pageTotal: 2
total: 10