在Spring Boot項目中,利用PageHelper插件可以輕松實現數據分頁功能。以下是具體的實現步驟和代碼示例。
添加依賴
在項目的pom.xml
文件中添加PageHelper和MyBatis的依賴。
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version>
</dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>
配置PageHelper
在application.properties
或application.yml
中配置PageHelper的參數。
# PageHelper配置
pagehelper:helper-dialect: mysqlreasonable: truesupport-methods-arguments: trueparams: count=countSql
創建實體類
假設我們有一個圖書系統數據,定義圖書實體類,對應數據庫中的圖書表。
package com.itheima.sprintbootmybatis.pojo;/*** Book 實體類*/
public class Book {// 圖書ID,使用Long類型private Long id;// 圖書名稱,使用String類型private String name;// 圖書作者,使用String類型private String author;// 圖書價格,使用Double類型private Double price;// Getters 和 Setters 方法public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}// 重寫toString方法,方便打印對象信息@Overridepublic String toString() {return "Book{" +"id=" + id +", name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}
創建Mapper接口
創建一個MyBatis的Mapper接口,用于查詢圖書數據。
package com.itheima.sprintbootmybatis.mapper;
import com.itheima.sprintbootmybatis.pojo.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface BookMapper {
//查詢所有圖書@Select("select * FROM books")List<Book> getAllBooks();@Select("SELECT COUNT(*) FROM books")long getTotalBooks(); // 獲取總記錄數}
創建Service層
創建UserServiceImpl和UserService;
在Service層中調用PageHelper進行分頁查詢。
package com.itheima.sprintbootmybatis.service.impl;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.sprintbootmybatis.mapper.BookMapper;
import com.itheima.sprintbootmybatis.pojo.Book;
import com.itheima.sprintbootmybatis.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookMapper bookMapper;@Overridepublic List<Book> getAllBooks(int page, int size) {//確保頁碼和每頁大小合理if (page <= 0) page = 1;if (size <= 0) size = 10;// 使用PageHelper進行分頁PageHelper.startPage(page, size);return bookMapper.getAllBooks();}@Overridepublic long getTotalBooks() {return bookMapper.getTotalBooks(); // 調用Mapper方法獲取總記錄數}
}
package com.itheima.sprintbootmybatis.service;
import com.itheima.sprintbootmybatis.pojo.Book;import java.util.List;public interface BookService {List<Book> getAllBooks(int page,int size);long getTotalBooks();
}
創建統一的BookApiResponse?
設計一個通用的響應類有助于保持API的一致性,便于前端處理和錯誤管理。以下是一個常見的實現方式。
package com.itheima.sprintbootmybatis.common;
import java.util.List;
public class BookApiResponse<T> {private int code; // 狀態碼private List<T> data; // 數據列表private int page; // 當前頁碼private int size; // 每頁大小private long total; // 總記錄數// 成功時的構造函數public BookApiResponse(List<T> data, int page, int size, long total) {this.code = 200; // 默認成功狀態碼this.data = data;this.page = page;this.size = size;this.total = total;}// 錯誤時的構造函數public BookApiResponse(int code, String message) {this.code = code;this.data = null;this.page = 0;this.size = 0;this.total = 0;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public List<T> getData() {return data;}public void setData(List<T> data) {this.data = data;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}public long getTotal() {return total;}public void setTotal(long total) {this.total = total;}
}
創建Controller層
在Controller中接收分頁參數并返回分頁結果。
package com.itheima.sprintbootmybatis.controller;import com.itheima.sprintbootmybatis.pojo.Book;
import com.itheima.sprintbootmybatis.service.BookService;
import com.itheima.sprintbootmybatis.common.BookApiResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate BookService bookService;@GetMappingpublic BookApiResponse<Book> getAllBooks(@RequestParam(defaultValue = "1") int page,@RequestParam(defaultValue = "10") int size) {try {List<Book> books = bookService.getAllBooks(page, size);long total = bookService.getTotalBooks(); // 獲取總記錄數return new BookApiResponse<>(books, page, size, total);} catch (Exception e) {e.printStackTrace();return new BookApiResponse<>(500, "Internal Server Error");}}
}
測試分頁功能
啟動項目后,訪問/books
接口,傳入pageNum
和pageSize
參數即可獲取分頁數據。例如:
GET http://localhost:8080/books?page=1&size=10
響應結果將包含分頁信息,如當前頁、每頁數量、總頁數等。
分頁參數說明
page
:當前頁碼,默認值為1。- size:每頁顯示的數據條數,默認值為10。
total
:總數據量。- data:當前頁的數據列表。
通過以上步驟,可以輕松實現Spring Boot項目中圖書數據的分頁功能。PageHelper插件簡化了分頁邏輯的開發,提高了代碼的可維護性。