PageHelper實現分頁
如果你也在用 MyBatis,建議嘗試該分頁插件,這一定是最方便使用的分頁插件。分頁插件支持任何復雜的單表、多表分頁。——PageHelper官網。
后端實現
引入依賴
使用PageHelper之前,我們要先引入其依賴文件,或者jar包。這里使用maven項目演示,所以需要先引入依賴文件。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
在MyBatis配置文件中添加插件
使用PageHelper需要在MyBatis的全局配置文件中加入如下配置,其中數據庫的方言需要根據使用數據庫的情況自行配置。
<?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>
<plugins>
<!-- com.github.pagehelper 為 PageHelper 類所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 支持數據庫類型: Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
創建PageResult類
使用分頁時,往往會向前端傳遞總頁數以及每頁的內容,即total和List
此類中包含total、rows兩個屬性。由於該類中的rows不代指任一類型,所以無法指定泛型。
如果要使用dubbo等RPC技術請務必實現Serializable接口。
package entity;
import java.io.Serializable;
import java.util.List;
/**
* Created by rayfoo@qq.com Luna on 2020/4/13 0:44
*/
public class PageResult implements Serializable {
//總記錄數
private Long total;
//當前頁內容
private List rows;
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
public PageResult(Long total, List rows) {
this.total = total;
this.rows = rows;
}
public PageResult() {
}
}
編寫代碼
首先編寫Controlelr層代碼
- 先創建一個findPage()方法,接收前端傳遞的需要查詢的頁碼(PageNo)和每頁數據的條目(PageSize)。
@RequestMapping("/findPage")
public PageResult findPage(Integer pageNo,Integer pageSize){
return brandService.findPage(pageNo,pageSize);
}
在Service層也非常簡單
- 直接在查詢所有的語句的上一行加上
PageHelper.startPage(pageNo,pageSize);
就可以實現分頁查詢。 - 在查詢所有時,需要將返回結果強轉為Page
對象。
@Override
public PageResult findPage(Integer pageNo, Integer pageSize) {
//開啟分頁
PageHelper.startPage(pageNo,pageSize);
//查詢數據
Page<User> page = (Page<Brand>) userMapper.selectByExample(null);
//返回結果
return new PageResult(page.getTotal(),page.getResult());
}
測試
此時,直接在前端調用localhost:8080/user/findPage?pageNo=1&pageSize=5
即可獲取第一頁的五條數據。