最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合PageHelper實現(xiàn)分頁查詢功能

 更新時間:2026年04月29日 09:45:16   作者:ffqws_  
本文介紹了在SpringBoot+MyBatis項目中使用PageHelper實現(xiàn)分頁功能的方法,包括PageHelper的簡要介紹,環(huán)境搭建,核心使用方式,實戰(zhàn)案例,以及PageHelper的工作原理,通過PageHelper,可以實現(xiàn)近乎零侵入的分頁功能,使分頁邏輯與業(yè)務(wù)代碼解耦,需要的朋友可以參考下

一、為什么需要分頁?

如果不進(jìn)行分頁,那么就意味著要查詢和渲染數(shù)據(jù)庫中所有的符合條件的數(shù)據(jù),會出現(xiàn)查詢緩慢,渲染大量數(shù)據(jù)造成卡頓。

分頁查詢是解決上述問題的經(jīng)典方案。本文介紹在 Spring Boot + MyBatis 項目中,如何使用 PageHelper 快速實現(xiàn)分頁功能。

二、PageHelper 簡介

PageHelper 是 MyBatis 生態(tài)中非常流行的分頁插件,它的核心優(yōu)勢在于:

1.操作簡單,只需在查詢前調(diào)用 startPage(),無需修改原有 SQL。

2.自動化,自動攔截 SQL,拼接 LIMIT 語句并執(zhí)行 count 查詢,其原理就是幫你寫LIMIT語句。

3.易集成,提供 Spring Boot Starter,開箱即用。

三、環(huán)境搭建

在 pom.xml 中添加 PageHelper 的 Spring Boot Starter:

<!-- pageHelper 坐標(biāo) -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.6</version>
</dependency>

為了前后端數(shù)據(jù)格式統(tǒng)一,定義一個通用的分頁結(jié)果類 PageBean:

public class PageBean<T> {
    private Long total;      // 總記錄數(shù)
    private List<T> items;   // 當(dāng)前頁數(shù)據(jù)列表
}

total:告訴前端一共有多少條數(shù)據(jù),用于計算總頁數(shù)
items:當(dāng)前頁的具體數(shù)據(jù)

四、核心使用方式

十分簡單,只需一行代碼就能開啟分頁查詢:

//開啟分頁查詢 PageHelp
PageHelper.startPage(pageNum,pageSize);
//直接進(jìn)入mapper層即可,pagehelper會自動插入LIMIT語句
List<Article>as= articleMapper.list(userid,categoryId,state);

五、實戰(zhàn):文章列表分頁查詢

 以項目中的文章列表查詢?yōu)槔?,完整展示?Controller 到 Mapper 的分頁實現(xiàn)鏈路。

Controller 層


接收前端傳來的分頁參數(shù)和查詢條件:

@GetMapping
public Result<PageBean<Article>> list(
    Integer pageNum,
    Integer pageSize,
    @RequestParam(required = false) Integer categoryId,
    @RequestParam(required = false) String state
) {
    PageBean<Article> pb = articleService.list(pageNum, pageSize, categoryId, state);
    return Result.success(pb);
}

要點說明:
pageNum:當(dāng)前頁碼(從 1 開始)
pageSize:每頁顯示條數(shù)
categoryId 和 state 是業(yè)務(wù)查詢條件,使用 required = false 表示可選

注意返回值的類型。

Service 層

這是分頁邏輯的核心層:

@Override
public PageBean<Article> list(Integer pageNum, Integer pageSize, 
                              Integer categoryId, String state) {
    // 1. 創(chuàng)建 PageBean 對象
    PageBean<Article> pb = new PageBean<>();

    // 2. 開啟分頁查詢
    PageHelper.startPage(pageNum, pageSize);

    // 3. 調(diào)用 Mapper 查詢(此時返回的 List 實際是 Page 類型)
    Map<String, Object> map = ThreadLocalUtil.get();
    Integer userid = (Integer) map.get("id");
    List<Article> as = articleMapper.list(userid, categoryId, state);

    // 4. 強轉(zhuǎn)為 Page 對象,獲取分頁信息
    Page<Article> p = (Page<Article>) as;

    // 5. 封裝結(jié)果
    pb.setTotal(p.getTotal());
    pb.setItems(p.getResult());
    return pb;
}

第四步轉(zhuǎn)化的目的是使用Page類中的方法獲取具體的分頁信息,這個類是由Pagehelper提供的。

Mapper 層

正常寫就行,沒有什么變動:

<select id="list" resultType="org.example.pojo.Article">
    select * from article
    <where>
        <if test="categoryId != null">
            category_id = #{categoryId}
        </if>
        <if test="state != null">
            and state = #{state}
        </if>
        and create_user = #{userid}
    </where>
</select>

PageHelper 會自動完成兩件事:
執(zhí)行 count 查詢:SELECT COUNT(*) FROM article WHERE ...
拼接分頁 SQL:在原 SQL 后添加 LIMIT offset, pageSize

六、PageHelper 工作原理(簡述)

PageHelper 通過 MyBatis 的 Interceptor(攔截器) 機制,在執(zhí)行查詢時自動改寫 SQL。startPage() 方法將分頁參數(shù)放入 ThreadLocal,確保同一線程中的下一次查詢被攔截處理。屬于AOP編程思想,但并不是通過SpringBoot的AOP實現(xiàn)的,而是基于MyBatis的攔截機制。

七、總結(jié)

通過 PageHelper,我們在 Spring Boot 項目中實現(xiàn)了近乎零侵入的分頁功能:
加依賴:pagehelper-spring-boot-starter
封裝結(jié)果 : PageBean<T>
一行開啟 : PageHelper.startPage(pageNum, pageSize)
正常查詢 : Mapper SQL 無需改動

進(jìn)行強轉(zhuǎn):List->Page
提取結(jié)果 : Page.getTotal() + Page.getResult()
這種設(shè)計讓分頁邏輯與業(yè)務(wù)代碼完全解耦,是我們?nèi)粘i_發(fā)中非常推薦的分頁方案。

以上就是SpringBoot整合PageHelper實現(xiàn)分頁查詢功能的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot PageHelper分頁查詢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot啟動后立即執(zhí)行的幾種方法小結(jié)

    SpringBoot啟動后立即執(zhí)行的幾種方法小結(jié)

    在項目開發(fā)中某些場景必須要用到啟動項目后立即執(zhí)行方式的功能,本文主要介紹了SpringBoot啟動后立即執(zhí)行的幾種方法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • Servlet開發(fā)JavaWeb工程示例詳解

    Servlet開發(fā)JavaWeb工程示例詳解

    這篇文章主要介紹了Servlet開發(fā)JavaWeb工程示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 從零開始學(xué)java之二叉樹和哈希表實現(xiàn)代碼

    從零開始學(xué)java之二叉樹和哈希表實現(xiàn)代碼

    這篇文章主要介紹了java之二叉樹和哈希表實現(xiàn)的相關(guān)資料,二叉查找樹和平衡二叉樹是二叉樹的兩種特殊形式,哈希表是一種通過哈希函數(shù)將數(shù)據(jù)與哈希值關(guān)聯(lián)起來的數(shù)據(jù)結(jié)構(gòu),可以快速查找數(shù)據(jù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例

    SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例

    這篇文章主要介紹了SpringBoot繼承LogStash實現(xiàn)日志收集的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Feign調(diào)用全局異常處理解決方案

    Feign調(diào)用全局異常處理解決方案

    這篇文章主要介紹了Feign調(diào)用全局異常處理解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring Boot 2.4新特性減少95%內(nèi)存占用問題

    Spring Boot 2.4新特性減少95%內(nèi)存占用問題

    這篇文章主要介紹了Spring Boot 2.4新特性減少95%內(nèi)存占用問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 2018年java技術(shù)面試題整理

    2018年java技術(shù)面試題整理

    小編為大家整理了2018年最新的關(guān)于java技術(shù)相關(guān)的面試題,以及給出了最簡簡答方式,學(xué)習(xí)下吧。
    2018-02-02
  • Java main 方法面試題的詳細(xì)整理

    Java main 方法面試題的詳細(xì)整理

    這篇文章主要介紹了Java main 方法面試題的詳細(xì)整理的相關(guān)資料,這里介紹了10個經(jīng)典面試題的方法,需要的朋友可以參考下
    2017-09-09
  • 解決JAVA遍歷List集合,刪除數(shù)據(jù)時出現(xiàn)的問題

    解決JAVA遍歷List集合,刪除數(shù)據(jù)時出現(xiàn)的問題

    這篇文章主要介紹了解決JAVA遍歷List集合時,刪除數(shù)據(jù)出現(xiàn)的問題,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Quarkus集成open api接口使用swagger ui展示

    Quarkus集成open api接口使用swagger ui展示

    這篇文章主要為大家介紹了Quarkus集成open?api接口使用swagger?ui的展示示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02

最新評論

穆棱市| 鱼台县| 绿春县| 南昌市| 沁阳市| 九江市| 辛集市| 古丈县| 双鸭山市| 婺源县| 安陆市| 彰化县| 策勒县| 绍兴县| 奇台县| 旅游| 灵璧县| 峨山| 五常市| 防城港市| 南汇区| 二连浩特市| 增城市| 田东县| 湘潭市| 开封市| 沁水县| 蒲城县| 呼和浩特市| 莱阳市| 邵阳市| 巴马| 隆化县| 都江堰市| 新邵县| 柘荣县| 奉化市| 吴桥县| 临颍县| 水富县| 邳州市|