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

深入了解MyBatis分頁機(jī)制

 更新時(shí)間:2023年12月25日 08:23:53   作者:小威要向諸佬學(xué)習(xí)呀  
在企業(yè)項(xiàng)目的數(shù)據(jù)庫操作中,分頁查詢是一個(gè)常見需求,尤其當(dāng)數(shù)據(jù)量龐大時(shí),MyBatis作為我們Java開發(fā)者的持久層框架,為分頁提供了靈活的支持,本篇文章我們將深入探討MyBatis的分頁機(jī)制,使我們?cè)趯?shí)際開發(fā)項(xiàng)目中運(yùn)用自如,需要的朋友可以參考下

MyBatis分頁原理

在講解mybatis的分頁原理之前,我們先來看一下:內(nèi)存分頁 vs. 數(shù)據(jù)庫分頁

  • 內(nèi)存分頁:查詢數(shù)據(jù)庫獲取全部數(shù)據(jù),然后在內(nèi)存中進(jìn)行分頁。這種方式簡單但效率低下,當(dāng)數(shù)據(jù)量巨大時(shí)可能導(dǎo)致內(nèi)存溢出。
  • 數(shù)據(jù)庫分頁:利用數(shù)據(jù)庫的分頁功能(比如 MySQL 的 LIMIT 和 OFFSET),僅查詢當(dāng)前頁的數(shù)據(jù)。這種方式效率高,但需要編寫特定的 SQL。

現(xiàn)在我們?cè)倬唧w講MyBatis 的分頁方式。

MyBatis 支持兩種分頁方式:物理分頁和內(nèi)存分頁。但是在實(shí)際應(yīng)用中,博主比較推薦使用物理分頁。

  • 物理分頁:通過特定的 SQL 實(shí)現(xiàn),依賴數(shù)據(jù)庫的分頁功能。
  • 內(nèi)存分頁:雖然 MyBatis 支持,但不推薦在大數(shù)據(jù)量場(chǎng)景下使用。

MyBatis 分頁插件

為了實(shí)現(xiàn)物理分頁,MyBatis 提供了分頁插件,如 PageHelper。這些插件可以自動(dòng)修改原始 SQL,添加分頁相關(guān)的語句。

如何使用 MyBatis 分頁插件

接下來我們講解一下如何使用 MyBatis 分頁插件 。

首先第一步肯定是引入依賴

先創(chuàng)建一個(gè) Maven 項(xiàng)目,引入 PageHelper 依賴:

<dependency>  
    <groupId>com.github.pagehelper</groupId>  
    <artifactId>pagehelper-spring-boot-starter</artifactId>   
</dependency>

然后配置 PageHelper

在 MyBatis 的配置文件(如 mybatis-config.xml)中,添加插件配置:

<plugins>  
    <plugin interceptor="com.github.pagehelper.PageInterceptor">  
        <property name="dialect" value="mysql"/> <!-- 根據(jù)實(shí)際數(shù)據(jù)庫選擇方言 -->  
        <property name="reasonable" value="true"/> <!-- 支持接口參數(shù)中的 pageNum 和 pageSize 為 0 時(shí)使用默認(rèn)值 -->  
        <property name="supportMethodsArguments" value="true"/> <!-- 支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù) -->  
        <property name="params" value="count(countSql)"/> <!-- count 查詢的 SQL 參數(shù) -->  
    </plugin>  
</plugins>

最后使用 PageHelper

在 Mapper 接口或 Service 層使用 PageHelper:

// 在查詢之前設(shè)置分頁參數(shù)  
PageHelper.startPage(pageNum, pageSize);  
List<User> users = userMapper.selectByExample(example);  
// 使用 PageInfo 包裝查詢結(jié)果,獲取分頁信息  
PageInfo<User> pageInfo = new PageInfo<>(users, pageSize);

以博主之前做過的課設(shè)項(xiàng)目為例:

我們手上現(xiàn)在有一個(gè)UserMapper接口,用來查詢用戶數(shù)據(jù):

public interface UserMapper {  
    List<User> selectAllUsers();  
}

在Service層或Controller層中,我們這時(shí)候可以使用PageHelper來實(shí)現(xiàn)分頁:

@Service  
public class UserService {  
    @Autowired  
    private UserMapper userMapper;  
      
    public PageInfo<User> getUsers(int pageNum, int pageSize) {  
        PageHelper.startPage(pageNum, pageSize);  // 啟動(dòng)分頁  
        List<User> users = userMapper.selectAllUsers();  // 查詢用戶數(shù)據(jù)  
        return new PageInfo<>(users);  // 使用PageInfo包裝查詢結(jié)果,獲取分頁信息  
    }  
}

當(dāng)調(diào)用getUsers方法時(shí),PageHelper會(huì)自動(dòng)為selectAllUsers方法中的SQL添加分頁語句,從而只查詢當(dāng)前頁的數(shù)據(jù)。

前端可以根據(jù)返回的PageInfo對(duì)象獲取當(dāng)前頁的數(shù)據(jù)、總頁數(shù)、總記錄數(shù)等信息,并進(jìn)行相應(yīng)的展示。

文章到這里就先結(jié)束了,后續(xù)會(huì)繼續(xù)分享相關(guān)的知識(shí)點(diǎn)。

以上就是深入了解MyBatis分頁機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于MyBatis分頁機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信隨機(jī)生成紅包金額算法java版

    微信隨機(jī)生成紅包金額算法java版

    這篇文章主要為大家詳細(xì)介紹了java和php版的微信隨機(jī)生成紅包金額算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例

    Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例

    這篇文章主要介紹了Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解Servlet 3.0/3.1 中的異步處理

    詳解Servlet 3.0/3.1 中的異步處理

    這篇文章主要介紹了詳解Servlet 3.0/3.1 中的異步處理,實(shí)例分析了servlet 3.0異步處理的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • java8 集合 多字段 分組 統(tǒng)計(jì)個(gè)數(shù)代碼

    java8 集合 多字段 分組 統(tǒng)計(jì)個(gè)數(shù)代碼

    這篇文章主要介紹了java8 集合 多字段 分組 統(tǒng)計(jì)個(gè)數(shù)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Logback日志基礎(chǔ)及自定義配置代碼實(shí)例

    Logback日志基礎(chǔ)及自定義配置代碼實(shí)例

    這篇文章主要介紹了Logback日志基礎(chǔ)及自定義配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring?Security?登錄時(shí)添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例

    Spring?Security?登錄時(shí)添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例

    這篇文章主要為大家介紹了Spring?Security?登錄時(shí)添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式

    Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式

    這篇文章主要介紹了Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • spring快速入門實(shí)例教程

    spring快速入門實(shí)例教程

    這篇文章主要介紹了spring快速入門實(shí)例,主要分析了spring的基本配置與控制反轉(zhuǎn),對(duì)于spring的學(xué)習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 使用controller傳boolean形式值

    使用controller傳boolean形式值

    這篇文章主要介紹了使用controller傳boolean形式值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 兩種延時(shí)thread和timer詳解及實(shí)例代碼

    Java 兩種延時(shí)thread和timer詳解及實(shí)例代碼

    這篇文章主要介紹了Java 兩種延時(shí)thread和timer詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評(píng)論

利津县| 蓝山县| 麻栗坡县| 措勤县| 垣曲县| 福清市| 安仁县| 高台县| 仁化县| 蛟河市| 芮城县| 永顺县| 富顺县| 阜南县| 桃源县| 大姚县| 鸡东县| 临泽县| 阿瓦提县| 上蔡县| 海宁市| 霍州市| 桃江县| 渝中区| 凉山| 电白县| 七台河市| 华宁县| 东莞市| 凤阳县| 石河子市| 策勒县| 泰宁县| 乐清市| 哈密市| 静海县| 大石桥市| 仪征市| 大港区| 凤翔县| 嘉鱼县|