亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis的分頁實現(xiàn)方式

 更新時間:2025年06月11日 14:59:19   作者:碼上心間  
MyBatis 的分頁實現(xiàn)方式主要有以下幾種,每種方式適用于不同的場景,且在性能、靈活性和代碼侵入性上有所差異,對Mybatis的分頁實現(xiàn)方式感興趣的朋友一起看看吧

MyBatis 的分頁實現(xiàn)方式主要有以下幾種,每種方式適用于不同的場景,且在性能、靈活性和代碼侵入性上有所差異:

?1. 原生 SQL 分頁(物理分頁)?

原理:直接在 SQL 中編寫數(shù)據(jù)庫特定的分頁語法(如 MySQL 的 LIMIT、Oracle 的 ROWNUM)。
示例

<select id="selectUsers" resultType="User">
  SELECT * FROM users
  LIMIT #{offset}, #{pageSize}
</select>

優(yōu)點

  • 性能最優(yōu),直接通過數(shù)據(jù)庫物理分頁,僅查詢所需數(shù)據(jù)。
  • 無額外依賴,適用于簡單場景。

缺點

  • SQL 與數(shù)據(jù)庫類型綁定,切換數(shù)據(jù)庫需修改 SQL。
  • 需要手動計算分頁參數(shù)(offset、pageSize)。

?2. RowBounds 分頁(邏輯分頁)?

原理:通過 MyBatis 的 RowBounds 對象實現(xiàn)內(nèi)存分頁(邏輯分頁)。查詢時會獲取全部數(shù)據(jù),但在內(nèi)存中截取指定范圍。
示例

List<User> users = sqlSession.selectList("selectUsers", null, new RowBounds(offset, pageSize));

優(yōu)點

  • 代碼簡單,無需修改 SQL。
  • 兼容所有數(shù)據(jù)庫。

缺點

  • ?性能差:數(shù)據(jù)量大時會導致內(nèi)存溢出或查詢緩慢(需全量加載數(shù)據(jù))。
  • 僅適用于小數(shù)據(jù)集。

?3. PageHelper 插件(推薦)?

原理:通過攔截器動態(tài)修改 SQL,自動添加分頁語句(物理分頁)。支持多種數(shù)據(jù)庫,并封裝分頁結果(總條數(shù)、頁碼等)。
使用步驟

?引入依賴

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.3.0</version>
</dependency>

?配置攔截器?(MyBatis 配置文件中):

<plugins>
  <plugin interceptor="com.github.pagehelper.PageInterceptor">
    <property name="helperDialect" value="mysql"/> <!-- 指定數(shù)據(jù)庫類型 -->
  </plugin>
</plugins>

?代碼調(diào)用

// 開啟分頁
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectUsers();
// 封裝分頁結果
PageInfo<User> pageInfo = new PageInfo<>(users);

優(yōu)點

  • 自動適配不同數(shù)據(jù)庫的分頁語法(如 MySQL、Oracle、PostgreSQL)。
  • 提供 PageInfo 對象,包含總記錄數(shù)、總頁數(shù)、當前頁等分頁信息。
  • 對代碼侵入性低。

缺點

  • 需要引入第三方依賴。

?4. MyBatis-Plus 分頁插件

原理:MyBatis-Plus 是 MyBatis 的增強工具,內(nèi)置分頁插件,通過攔截器實現(xiàn)物理分頁。
使用步驟

?引入依賴

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.3.1</version>
</dependency>

?配置分頁插件

@Configuration
public class MybatisPlusConfig {
  @Bean
  public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    return interceptor;
  }
}

?代碼調(diào)用

// 創(chuàng)建分頁參數(shù)
Page<User> page = new Page<>(pageNum, pageSize);
// 執(zhí)行分頁查詢
Page<User> result = userMapper.selectPage(page, null);
// 獲取分頁信息
long total = result.getTotal();
List<User> users = result.getRecords();

優(yōu)點

  • 與 MyBatis-Plus 深度集成,支持更豐富的 CRUD 操作。
  • 自動處理分頁邏輯,返回包含分頁信息的 Page 對象。

?5. 自定義分頁攔截器

  • 原理:手動實現(xiàn) MyBatis 的 Interceptor 接口,動態(tài)修改 SQL 添加分頁邏輯。
  • 適用場景
  • 需要高度定制化分頁邏輯(如特殊的分頁規(guī)則)。避免引入第三方依賴。

缺點

  • 開發(fā)成本高,需處理不同數(shù)據(jù)庫的語法差異。

?分頁方案對比

?方案?性能?數(shù)據(jù)庫兼容性?代碼侵入性?適用場景
原生 SQL 分頁低(需手動適配)簡單查詢、固定數(shù)據(jù)庫類型
RowBounds小數(shù)據(jù)集、邏輯分頁
PageHelper通用場景,推薦使用
MyBatis-Plus使用 MyBatis-Plus 的項目
自定義攔截器可定制特殊需求

?總結

  • ?推薦方案:優(yōu)先使用 ?PageHelper 或 ?MyBatis-Plus 分頁插件,二者均通過物理分頁實現(xiàn)高性能,且對代碼侵入性低。?
  • 性能陷阱:避免使用 RowBounds 處理大數(shù)據(jù)集,可能導致內(nèi)存溢出。?
  • 數(shù)據(jù)庫兼容性:若項目需支持多數(shù)據(jù)庫,選擇 PageHelper 或 MyBatis-Plus,它們能自動適配不同數(shù)據(jù)庫的分頁語法。

到此這篇關于Mybatis是如何進行分頁的的文章就介紹到這了,更多相關Mybatis分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java對Map進行按value排序的幾種常見方法

    Java對Map進行按value排序的幾種常見方法

    在日常開發(fā)中,Map 是我們經(jīng)常使用的數(shù)據(jù)結構之一,盡管 Map 是按鍵 (key) 存儲和檢索數(shù)據(jù)的,但有時我們需要根據(jù) value 進行排序,這篇博客將詳細探討如何在 Java 中對 Map 進行按 value 排序的幾種常見方法,并分析它們的優(yōu)缺點,需要的朋友可以參考下
    2025-03-03
  • Java IO復用_動力節(jié)點Java學院整理

    Java IO復用_動力節(jié)點Java學院整理

    這篇文章主要介紹了Java IO復用的相關知識,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-05-05
  • SpringBoot中基于JWT的單token授權和續(xù)期方案步驟詳解

    SpringBoot中基于JWT的單token授權和續(xù)期方案步驟詳解

    在前后端分離架構中,用戶登錄后,后端生成JWT?Token返給前端存于LocalStorage,每次請求攜帶Token驗證身份,后端校驗其有效性,本文給大家介紹SpringBoot中基于JWT的單token授權和續(xù)期方案步驟詳解,感興趣的朋友一起看看吧
    2024-09-09
  • SpringBoot整合Netty實現(xiàn)WebSocket的示例代碼

    SpringBoot整合Netty實現(xiàn)WebSocket的示例代碼

    本文主要介紹了SpringBoot整合Netty實現(xiàn)WebSocket的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • 詳解java中static關鍵詞的作用

    詳解java中static關鍵詞的作用

    這篇文章主要介紹了java中static關鍵詞的作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 淺談Storm在zookeeper上的目錄結構

    淺談Storm在zookeeper上的目錄結構

    這篇文章主要介紹了淺談Storm在zookeeper上的目錄結構的相關內(nèi)容,涉及storm使用zookeeper的操作以及詳細結構圖,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Java源碼解析HashMap簡介

    Java源碼解析HashMap簡介

    今天小編就為大家分享一篇關于Java源碼解析HashMap簡介,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 使用java實現(xiàn)字符編碼轉換(附源碼)

    使用java實現(xiàn)字符編碼轉換(附源碼)

    隨著全球化的軟件應用越來越廣泛,不同平臺與系統(tǒng)之間的數(shù)據(jù)交換,常常面臨字符集不一致的問題,本文主要介紹了如何使用Java進行字符編碼轉換,需要的可以了解下
    2025-05-05
  • Java實現(xiàn)FIFO任務調(diào)度隊列策略

    Java實現(xiàn)FIFO任務調(diào)度隊列策略

    在工作中,很多高并發(fā)的場景中,我們會用到隊列來實現(xiàn)大量的任務請求。當任務需要某些特殊資源的時候,我們還需要合理的分配資源,讓隊列中的任務高效且有序完成任務。本文將為大家介紹通過java實現(xiàn)FIFO任務調(diào)度,需要的可以參考一下
    2021-12-12
  • Java框架篇:Spring+SpringMVC+hibernate整合開發(fā)

    Java框架篇:Spring+SpringMVC+hibernate整合開發(fā)

    本篇文章將會對Spring+SpringMVC+hibernate的整合開發(fā)進行介紹。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-02-02

最新評論