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

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

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

一、為什么需要分頁(yè)?

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

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

二、PageHelper 簡(jiǎn)介

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

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

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

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)一,定義一個(gè)通用的分頁(yè)結(jié)果類 PageBean:

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

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

四、核心使用方式

十分簡(jiǎn)單,只需一行代碼就能開啟分頁(yè)查詢:

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

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

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

Controller 層


接收前端傳來的分頁(yè)參數(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);
}

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

注意返回值的類型。

Service 層

這是分頁(yè)邏輯的核心層:

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

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

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

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

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

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

Mapper 層

正常寫就行,沒有什么變動(dòng):

<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 會(huì)自動(dòng)完成兩件事:
執(zhí)行 count 查詢:SELECT COUNT(*) FROM article WHERE ...
拼接分頁(yè) SQL:在原 SQL 后添加 LIMIT offset, pageSize

六、PageHelper 工作原理(簡(jiǎn)述)

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

七、總結(jié)

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了Feign調(diào)用全局異常處理解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    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ì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 2018年java技術(shù)面試題整理

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

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

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

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

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

    這篇文章主要介紹了解決JAVA遍歷List集合時(shí),刪除數(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

最新評(píng)論

平安县| 广宗县| 潼南县| 花莲县| 永安市| 南宁市| 肃南| 新乡县| 丹寨县| 涞源县| 株洲市| 论坛| 潞城市| 青冈县| 东港市| 辽源市| 高阳县| 中阳县| 青田县| 沈阳市| 天镇县| 西盟| 襄垣县| 乳源| 喀什市| 资中县| 遂平县| 泰宁县| 丽江市| 黔江区| 唐山市| 新源县| 肇州县| 赤水市| 武邑县| 鄄城县| 阿瓦提县| 田林县| 肥西县| 拜城县| 涞水县|