欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

MyBatis分頁(yè)原理

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

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

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

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

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

MyBatis 分頁(yè)插件

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

如何使用 MyBatis 分頁(yè)插件

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

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

先創(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ù)庫(kù)選擇方言 -->  
        <property name="reasonable" value="true"/> <!-- 支持接口參數(shù)中的 pageNum 和 pageSize 為 0 時(shí)使用默認(rèn)值 -->  
        <property name="supportMethodsArguments" value="true"/> <!-- 支持通過 Mapper 接口參數(shù)來傳遞分頁(yè)參數(shù) -->  
        <property name="params" value="count(countSql)"/> <!-- count 查詢的 SQL 參數(shù) -->  
    </plugin>  
</plugins>

最后使用 PageHelper

在 Mapper 接口或 Service 層使用 PageHelper:

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

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

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

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

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

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

相關(guān)文章

  • java連連看游戲菜單設(shè)計(jì)

    java連連看游戲菜單設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了java連連看游戲菜單部分的設(shè)計(jì)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java List 用法詳解及實(shí)例分析

    Java List 用法詳解及實(shí)例分析

    這篇文章主要介紹了Java List 用法詳解及實(shí)例分析的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Feign接口方法返回值設(shè)置方式

    Feign接口方法返回值設(shè)置方式

    這篇文章主要介紹了Feign接口方法返回值設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Http學(xué)習(xí)之組裝報(bào)文

    Http學(xué)習(xí)之組裝報(bào)文

    這篇文章主要介紹了Http學(xué)習(xí)之組裝報(bào)文,組裝報(bào)文就是指組裝HTTP響應(yīng)報(bào)文,你需要返回客戶請(qǐng)求的相應(yīng)資源,通常一個(gè)完整的報(bào)文包括報(bào)文頭和報(bào)文體,一起來看看吧
    2023-04-04
  • 使用Java實(shí)現(xiàn)加密之AES加解密

    使用Java實(shí)現(xiàn)加密之AES加解密

    這篇文章主要介紹了使用Java實(shí)現(xiàn)加密之AES加解密,AES為最常見的對(duì)稱加密算法,對(duì)稱加密算法也就是加密和解密用相同的密鑰,需要的朋友可以參考下
    2023-05-05
  • java @Data布爾值boolean的坑及解決

    java @Data布爾值boolean的坑及解決

    本文介紹了在使用Spring框架時(shí),遇到的一個(gè)屬性命名規(guī)則問題,在Spring框架中,如果類的屬性名稱第一個(gè)字母小寫,第二個(gè)字母大寫,那么在調(diào)用set方法時(shí),Spring會(huì)將屬性的后面的字母轉(zhuǎn)換為小寫,這種情況下,如果下游消費(fèi)端調(diào)用得到的返回json串
    2024-10-10
  • Spring?@Autowired注解超詳細(xì)示例

    Spring?@Autowired注解超詳細(xì)示例

    @Autowired注解可以用在類屬性,構(gòu)造函數(shù),setter方法和函數(shù)參數(shù)上,該注解可以準(zhǔn)確地控制bean在何處如何自動(dòng)裝配的過程。在默認(rèn)情況下,該注解是類型驅(qū)動(dòng)的注入
    2022-08-08
  • SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實(shí)現(xiàn)方式

    SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實(shí)現(xiàn)方式

    SpringBoot支持多種配置文件位置和格式,其中application.properties和application.yml是默認(rèn)加載的文件,配置文件可以根據(jù)環(huán)境通過spring.profiles.active屬性進(jìn)行區(qū)分,命令行參數(shù)具有最高優(yōu)先級(jí),可覆蓋其他所有配置
    2024-09-09
  • 淺析java中print和println的區(qū)別

    淺析java中print和println的區(qū)別

    以下是對(duì)java中print和println的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 詳解java內(nèi)部類的訪問格式和規(guī)則

    詳解java內(nèi)部類的訪問格式和規(guī)則

    在本文里我們給大家詳細(xì)分享了關(guān)于java內(nèi)部類的訪問格式和規(guī)則知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2018-10-10

最新評(píng)論