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

Mybatis的分頁(yè)實(shí)現(xiàn)方式

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

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

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

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

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

優(yōu)點(diǎn)

  • 性能最優(yōu),直接通過(guò)數(shù)據(jù)庫(kù)物理分頁(yè),僅查詢所需數(shù)據(jù)。
  • 無(wú)額外依賴,適用于簡(jiǎn)單場(chǎng)景。

缺點(diǎn)

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

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

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

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

優(yōu)點(diǎn)

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

缺點(diǎn)

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

?3. PageHelper 插件(推薦)?

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

?引入依賴

<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ù)庫(kù)類型 -->
  </plugin>
</plugins>

?代碼調(diào)用

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

優(yōu)點(diǎn)

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

缺點(diǎn)

  • 需要引入第三方依賴。

?4. MyBatis-Plus 分頁(yè)插件

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

?引入依賴

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

?配置分頁(yè)插件

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

?代碼調(diào)用

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

優(yōu)點(diǎn)

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

?5. 自定義分頁(yè)攔截器

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

缺點(diǎn)

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

?分頁(yè)方案對(duì)比

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

?總結(jié)

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

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

相關(guān)文章

  • 使用java的Calendar對(duì)象獲得當(dāng)前日期

    使用java的Calendar對(duì)象獲得當(dāng)前日期

    本文給大家分享的是使用使用java的Calendar對(duì)象獲得當(dāng)前日期的上幾個(gè)度開始、結(jié)束時(shí)間,主要思路是先獲得當(dāng)前季度的開始和結(jié)束日期,在當(dāng)前日期的基礎(chǔ)上往前推3個(gè)月即上個(gè)季度的開始和結(jié)束日期,十分的實(shí)用,小伙伴們可以參考下。
    2015-07-07
  • SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    SpringBoot如何整合mybatis-generator-maven-plugin 1.4.0

    這篇文章主要介紹了SpringBoot整合mybatis-generator-maven-plugin 1.4.0的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-01-01
  • springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼

    springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼

    阿里云推出了直傳,本文主要介紹了springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Java之如何關(guān)閉流

    Java之如何關(guān)閉流

    這篇文章主要介紹了Java之如何關(guān)閉流問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題

    Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題

    這篇文章主要介紹了Spring?Cloud?Gateway?2.x跨域時(shí)出現(xiàn)重復(fù)Origin的BUG問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 通過(guò)實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用

    通過(guò)實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用

    這篇文章主要通過(guò)實(shí)例介紹了Java的Strus框架中的OGNL表達(dá)式使用,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • MybatisPlus 自定義.vm模板的生成

    MybatisPlus 自定義.vm模板的生成

    為更加快捷方便的開發(fā)代碼,使用MybatisPlus的代碼自動(dòng)生成功能,將一些繁瑣的操作自動(dòng)生成,本文主要介紹了MybatisPlus 自定義.vm模板的生成,感興趣的可以了解一下
    2024-03-03
  • Java拆箱與裝箱實(shí)例詳解

    Java拆箱與裝箱實(shí)例詳解

    這篇文章主要介紹了Java拆箱與裝箱,結(jié)合實(shí)例形式詳細(xì)分析了Java拆箱與裝箱相關(guān)的數(shù)據(jù)類型轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2019-11-11
  • java源碼解析之String類的compareTo(String otherString)方法

    java源碼解析之String類的compareTo(String otherString)方法

    這篇文章主要給大家介紹了關(guān)于java源碼解析之String類的compareTo(String otherString)方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • springboot接收json數(shù)據(jù)時(shí),接收到空值問(wèn)題

    springboot接收json數(shù)據(jù)時(shí),接收到空值問(wèn)題

    這篇文章主要介紹了springboot接收json數(shù)據(jù)時(shí),接收到空值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評(píng)論

黄梅县| 永靖县| 阿鲁科尔沁旗| 信阳市| 会昌县| 托克托县| 定安县| 慈利县| 怀安县| 西宁市| 商南县| 来凤县| 常山县| 聊城市| 高碑店市| 德令哈市| 封开县| 龙陵县| 阿拉善左旗| 枞阳县| 桐城市| 钟祥市| 尼玛县| 中卫市| 临江市| 鄢陵县| 常州市| 林芝县| 乡宁县| 武隆县| 绥德县| 泾川县| 崇信县| 蒲城县| 西昌市| 久治县| 安图县| 紫云| 莫力| 云龙县| 罗城|