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

MyBatis實現(xiàn)分頁全過程

 更新時間:2025年08月27日 08:44:49   作者:Java自學(xué)之旅  
MyBatis分頁有三種方式:手動SQL分頁(性能高但需處理數(shù)據(jù)庫差異)、RowBounds(簡單但不推薦)、PageHelper分頁插件(自動改寫SQL,推薦生產(chǎn)環(huán)境),PageHelper適合百萬級數(shù)據(jù)優(yōu)化,是終極解決方案

下面我將詳細(xì)講解MyBatis實現(xiàn)分頁的幾種方式,通過通俗易懂的故事和代碼示例幫助理解:

故事背景

假設(shè)我們經(jīng)營一個"圖書管理系統(tǒng)",數(shù)據(jù)庫中有10萬本圖書。

當(dāng)用戶查看圖書列表時,一次性加載所有數(shù)據(jù)會導(dǎo)致系統(tǒng)崩潰(就像把整個圖書館的書都堆在收銀臺上)。

這時就需要分頁功能——每次只展示"一架子書"(如每頁20本)。

一、MyBatis實現(xiàn)分頁的三種方式

1.手動SQL分頁(物理分頁)

SELECT * FROM books LIMIT #{start}, #{pageSize}

原理

直接在SQL中通過LIMIT(MySQL)或ROWNUM(Oracle)控制數(shù)據(jù)范圍。

代碼示例

// Mapper接口
List<Book> getBooksByPage(@Param("start") int start, @Param("pageSize") int pageSize);

// 調(diào)用方式(獲取第3頁,每頁20條)
int pageNum = 3;
int pageSize = 20;
List<Book> books = bookMapper.getBooksByPage((pageNum-1)*pageSize, pageSize);

? 優(yōu)點

  • 性能最佳(數(shù)據(jù)庫只返回所需數(shù)據(jù))
  • 完全掌控SQL邏輯

? 缺點

  • 需手動計算偏移量(如(pageNum-1)*pageSize
  • 不同數(shù)據(jù)庫語法不同(MySQL用LIMIT,Oracle用ROWNUM)

2.RowBounds分頁(邏輯分頁)

RowBounds rowBounds = new RowBounds(40, 20); // 跳過前40條,取20條
List<Book> books = sqlSession.selectList("getAllBooks", null, rowBounds);

原理
先查詢所有數(shù)據(jù)到內(nèi)存,再在Java層截取指定范圍(像把整個圖書館的書運到倉庫,再挑出20本)。

? 優(yōu)點

  • 使用簡單,無需改SQL

? 缺點

  • 性能災(zāi)難(數(shù)據(jù)量大時內(nèi)存溢出)
  • 實際工作中禁止使用!

3.分頁插件(推薦方案)

使用PageHelper插件(最主流方案):

// 只需在查詢前設(shè)置分頁參數(shù)
PageHelper.startPage(3, 20); // 第3頁,每頁20條
List<Book> books = bookMapper.selectAllBooks();

// 獲取分頁信息
PageInfo<Book> pageInfo = new PageInfo<>(books);
System.out.println("總頁數(shù):" + pageInfo.getPages());

原理

通過MyBatis攔截器自動改寫SQL,添加LIMIT語句(像有個智能機器人幫你從書架上拿指定范圍的書)。

配置步驟

  1. 添加依賴:
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.2</version>
</dependency>
  1. 配置攔截器(mybatis-config.xml):
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>

? 優(yōu)點

  • 零侵入(不改動原SQL)
  • 自動適配不同數(shù)據(jù)庫
  • 返回豐富分頁信息(總頁數(shù)/當(dāng)前頁等)

二、分頁原理對比表

方式性能易用性適用場景
手動SQL分頁??????簡單SQL,明確數(shù)據(jù)庫類型
RowBounds?????禁止生產(chǎn)使用
PageHelper?????????99%的生產(chǎn)場景

三、總結(jié)

絕對避免使用RowBounds邏輯分頁(除非數(shù)據(jù)量極?。?/p>

簡單場景可用手動SQL分頁(需處理數(shù)據(jù)庫差異)

PageHelper是終極解決方案

  • 自動生成分頁SQL
  • 統(tǒng)一不同數(shù)據(jù)庫行為
  • 返回完整分頁元數(shù)據(jù)

百萬級數(shù)據(jù)分頁優(yōu)化:

-- 使用索引覆蓋優(yōu)化
SELECT * FROM books 
WHERE id >= (SELECT id FROM books ORDER BY id LIMIT 1000000, 1)
LIMIT 20

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring注入Map集合實現(xiàn)策略模式詳解

    Spring注入Map集合實現(xiàn)策略模式詳解

    這篇文章主要介紹了Spring注入Map集合實現(xiàn)策略模式詳解,Spring提供通過@Resource注解將相同類型的對象注入到Map集合,并將對象的名字作為key,對象作為value封裝進(jìn)入Map,需要的朋友可以參考下
    2023-11-11
  • JAVA二叉樹的幾種遍歷(遞歸,非遞歸)實現(xiàn)

    JAVA二叉樹的幾種遍歷(遞歸,非遞歸)實現(xiàn)

    這篇文章主要介紹了JAVA二叉樹的幾種遍歷(遞歸,非遞歸)實現(xiàn),需要的朋友可以參考下
    2020-12-12
  • Java使用?Spire.PDF?for?Java輕松搞定拆分PDF

    Java使用?Spire.PDF?for?Java輕松搞定拆分PDF

    有時我們需要對大型?PDF?文檔進(jìn)行精細(xì)化管理,例如,將一個多頁的合同拆分成單頁以便逐頁審批,本文將為您介紹如何使用?Spire.PDF?for?Java?庫來輕松實現(xiàn)?PDF?拆分,感興趣的小伙伴可以了解下
    2025-12-12
  • Spring Boot優(yōu)雅地處理404異常問題

    Spring Boot優(yōu)雅地處理404異常問題

    這篇文章主要介紹了Spring Boot優(yōu)雅地處理404異常問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • IDEA中java: 找不到符號 符號: 變量log

    IDEA中java: 找不到符號 符號: 變量log

    這篇文章主要介紹了使用@Slf4j注解時出現(xiàn)log變量找不到符號問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • java中Calendar與Date類型互相轉(zhuǎn)換的方法

    java中Calendar與Date類型互相轉(zhuǎn)換的方法

    這篇文章主要介紹了java中Calendar與Date類型互相轉(zhuǎn)換的方法,Calendar與Date類型是我們?nèi)粘i_發(fā)中常用的兩種數(shù)據(jù)類型,它們用于不同的場景,兩者具有不同的方法,接下來通過實例給大家詳解,需要的朋友可以參考下
    2022-09-09
  • java中JDeps命令使用

    java中JDeps命令使用

    jdeps是一個Java類依賴分析工具,用于分析Java應(yīng)用程序的依賴情況,包括類、包、模塊以及JDK內(nèi)部API的使用,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • Java object類及正則表達(dá)式原理解析

    Java object類及正則表達(dá)式原理解析

    這篇文章主要介紹了Java object類及正則表達(dá)式原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 詳解Maven環(huán)境的搭建與idea配置

    詳解Maven環(huán)境的搭建與idea配置

    本篇文章主要介紹了詳解Maven環(huán)境的搭建與idea配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 防止SpringMVC攔截器攔截js等靜態(tài)資源文件的解決方法

    防止SpringMVC攔截器攔截js等靜態(tài)資源文件的解決方法

    本篇文章主要介紹了防止SpringMVC攔截器攔截js等靜態(tài)資源文件的解決方法,具有一定的參考價值,有興趣的同學(xué)可以了解一下
    2017-09-09

最新評論

新沂市| 明星| 祁门县| 卢氏县| 涪陵区| 阿克苏市| 淅川县| 盐亭县| 古丈县| 五寨县| 江源县| 行唐县| 吐鲁番市| 大荔县| 长沙市| 建德市| 佛学| 石阡县| 天长市| 定西市| 泾川县| 大方县| 浙江省| 万山特区| 万年县| 白城市| 吴川市| 海原县| 永定县| 八宿县| 兴隆县| 峡江县| 金昌市| 灵宝市| 万州区| 万荣县| 随州市| 长武县| 贵溪市| 南昌市| 江西省|