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

MyBatis 分頁插件 PageHelper的不同使用方式

 更新時(shí)間:2026年05月15日 09:32:00   作者:西涼的悲傷  
文章介紹了MyBatis分頁插件PageHelper的使用方法,并提供了多種使用方式的示例,需要注意的是,插件只能為緊跟在startPage方法后的第一個(gè)mybatis查詢方法進(jìn)行分頁,且不支持帶有forupdate語句的查詢,感興趣的朋友跟隨小編一起看看吧

前言

PageHelper 是 針對(duì) MyBatis 的一款分頁插件,它支持常見 Oracle、MySql、MariaDB、SQLite、DB2、PostgreSQL、SqlServer 等 12 種數(shù)據(jù)庫(kù)分頁,它支持常見的RowBounds(PageRowBounds)、PageHelper.startPage 方法調(diào)用、Mapper 接口參數(shù)調(diào)用等多種分頁方式。

官網(wǎng)

github

一、依賴

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>6.1.1</version>
    <scope>compile</scope>
</dependency>

二、分頁插件的不同使用方式

官網(wǎng)使用說明

第一種(推薦)

//Mapper接口方式的調(diào)用,推薦這種使用方式。
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectIf(1);

注意:只有緊跟在PageHelper.startPage方法后的第一個(gè)Mybatis的查詢(Select)方法會(huì)被分頁。

第二種

List<User> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));

第三種

PageHelper.offsetPage(0, 10);
List<User> list = userMapper.selectIf(1);

第四種(參數(shù)方法調(diào)用)

//存在以下 Mapper 接口方法,你不需要在 xml 處理后兩個(gè)參數(shù)
public interface CountryMapper {
    List<User> selectByPageNumSize(
            @Param("user") User user,
            @Param("pageNum") int pageNum,
            @Param("pageSize") int pageSize);
}
//配置supportMethodsArguments=true
//在代碼中直接調(diào)用:
List<User> list = userMapper.selectByPageNumSize(user, 1, 10);

第五種(參數(shù)對(duì)象)

/如果 pageNum 和 pageSize 存在于 User 對(duì)象中,只要參數(shù)有值,也會(huì)被分頁
//有如下 User 對(duì)象
public class User {
    //其他fields
    //下面兩個(gè)參數(shù)名和 params 配置的名字一致
    private Integer pageNum;
    private Integer pageSize;
}
//存在以下 Mapper 接口方法,你不需要在 xml 處理后兩個(gè)參數(shù)
public interface CountryMapper {
    List<User> selectByPageNumSize(User user);
}
//當(dāng) user 中的 pageNum!= null && pageSize!= null 時(shí),會(huì)自動(dòng)分頁
List<User> list = userMapper.selectByPageNumSize(user);

三、重要提示

1.只有緊跟在PageHelper.startPage方法后的第一個(gè)Mybatis的查詢(Select)方法會(huì)被分頁。

2.不要配置多個(gè)分頁插件
不要在系統(tǒng)中配置多個(gè)分頁插件(使用Spring時(shí),mybatis-config.xml和Spring配置方式,請(qǐng)選擇其中一種,不要同時(shí)配置多個(gè)分頁插件)!

3.分頁插件不支持帶有for update語句的分頁
對(duì)于帶有for update的sql,會(huì)拋出運(yùn)行時(shí)異常,對(duì)于這樣的sql建議手動(dòng)分頁,畢竟這樣的sql需要重視。

4.分頁插件不支持嵌套結(jié)果映射
由于嵌套結(jié)果方式會(huì)導(dǎo)致結(jié)果集被折疊,因此分頁查詢的結(jié)果在折疊后總數(shù)會(huì)減少,所以無法保證分頁結(jié)果數(shù)量正確。

四、示例

示例一

Controller 層接口:

    @PostMapping("/queryList")
    public ResponseEntity<PageInfo<ReconcileOrderDto>> queryList(@RequestBody ReconcileOrderRequest request) {
        List<ReconcileOrderDto> orderList = operateReconcileService.queryList(request);
        PageInfo<ReconcileOrderDto> pageInfo = new PageInfo<>(orderList);
        return ResponseEntity.ok().body(pageInfo);
    }

service 方法:

	public List<ReconcileOrderDto> queryList(ReconcileOrderRequest request) {
        ReconcileOrderPageDto orderPageDto = buildReconcileOrderPageDto(request);
        //分頁查詢
        PageHelper.startPage(request.getPage(), request.getPageSize());
        List<ReconcileOrderDto> pageReconcile = operateOrderMapper.selectOrderByReconcileTime(orderPageDto);
        return pageReconcile;
    }

示例二

上面使用了 PageInfo ,除了使用 PageHelper 自帶的 PageInfo 分頁類,也可以自己定義分頁類。

import com.github.pagehelper.Page;
import lombok.ToString;
import java.util.List;
@ToString
public class MyPageInfo<T>{
    /**
     * 總條數(shù)
     */
    private int total;
    /**
     * 條數(shù)
     */
    private int size;
    /**
     * 每頁條數(shù)
     */
    private int pageSize;
    /**
     * 當(dāng)前頁碼
     */
    private int pageNum;
    /**
     * 分頁數(shù)據(jù)
     */
    private List<T> list;
    public MyPageInfo(String code, String message, int size, int pageSize, int pageNum, int total, List<T> data) {
        super(code, message);
        this.size = size;
        this.pageSize = pageSize;
        this.pageNum = pageNum;
        this.list = data;
        this.total = total;
    }
    public MyPageInfo(String code, String message, List<T> data) {
        super(code, message);
        this.list = data;
    }
    public MyPageInfo(List<T> data) {
        this.list = data;
        if (data instanceof Page) {
            Page<T> page = (Page<T>) data;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();
            this.size = page.size();
            this.total = (int) page.getTotal();
        } else if (data != null) {
            this.pageNum = 1;
            this.pageSize = data.size();
            this.size = data.size();
            this.total = data.size();
        }
    }
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getPageNum() {
        return pageNum;
    }
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
    public Object getList() {
        return list;
    }
    public void setList(List<T> data) {
        this.list = data;
    }
    public int getTotal() {
        return total;
    }
    public void setTotal(int total) {
        this.total = total;
    }
}

上面的 自定義分頁類 MyPageInfo 含有 total、size等方法,你還可以增加其他字段,比如 sucess來標(biāo)識(shí)請(qǐng)求是否成功、errorMessage 錯(cuò)誤消息等。

使用 MyPageInfo 后,示例一的 代碼可以修改為:

    @PostMapping("/queryList")
    public ResponseEntity<MyPageInfo<ReconcileOrderDto>> queryList(@RequestBody ReconcileOrderRequest request) {
        List<ReconcileOrderDto> orderList = operateReconcileService.queryList(request);
        MyPageInfo<ReconcileOrderDto> myPageInfo = new MyPageInfo<>(orderList);
        return ResponseEntity.ok().body(myPageInfo );
    }

到此這篇關(guān)于MyBatis 分頁插件 PageHelper的不同使用方式的文章就介紹到這了,更多相關(guān)MyBatis 分頁插件 PageHelper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot 2 統(tǒng)一異常處理過程解析

    SpringBoot 2 統(tǒng)一異常處理過程解析

    這篇文章主要介紹了SpringBoot 2 統(tǒng)一異常處理過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java實(shí)現(xiàn)計(jì)算器的代碼

    Java實(shí)現(xiàn)計(jì)算器的代碼

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)計(jì)算器的詳細(xì)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Java線程中斷的本質(zhì)深入理解

    Java線程中斷的本質(zhì)深入理解

    Java的中斷是一種協(xié)作機(jī)制。也就是說調(diào)用線程對(duì)象的interrupt方法并不一定就中斷了正在運(yùn)行的線程,它只是要求線程自己在合適的時(shí)機(jī)中斷自己,本文將詳細(xì)介紹,需要了解的朋友可以參考下
    2012-12-12
  • SpringCloudAlibaba整合服務(wù)網(wǎng)關(guān)GateWay教程

    SpringCloudAlibaba整合服務(wù)網(wǎng)關(guān)GateWay教程

    文章介紹了Spring Cloud Gateway和Zuul的區(qū)別,并詳細(xì)描述了如何使用Gateway進(jìn)行服務(wù)轉(zhuǎn)發(fā)和自定義TokenFilter實(shí)現(xiàn)參數(shù)攔截訪問
    2026-01-01
  • MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例

    MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例

    這篇文章主要介紹了MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Java如何實(shí)現(xiàn)CIDR轉(zhuǎn)IP段

    Java如何實(shí)現(xiàn)CIDR轉(zhuǎn)IP段

    CIDR是一種用于高效分配和管理?IP?地址的網(wǎng)絡(luò)編址方法,這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)CIDR轉(zhuǎn)IP段,感興趣的小伙伴可以參考一下
    2025-03-03
  • mybatis解決<foreach>標(biāo)簽不能超過1000的問題

    mybatis解決<foreach>標(biāo)簽不能超過1000的問題

    MyBatis是一個(gè)開源的持久層框架,它可以幫助開發(fā)者簡(jiǎn)化數(shù)據(jù)庫(kù)操作的編寫,而foreach是MyBatis中的一個(gè)重要標(biāo)簽,用于在SQL語句中進(jìn)行循環(huán)操作,本文主要給大家介紹了mybatis解決<foreach>標(biāo)簽不能超過1000的問題,需要的朋友可以參考下
    2024-05-05
  • java圖片和文本同時(shí)提交到表單的實(shí)例代碼

    java圖片和文本同時(shí)提交到表單的實(shí)例代碼

    在本篇文章里小編給大家整理的是關(guān)于java實(shí)現(xiàn)圖片和文本同時(shí)提交到表單的相關(guān)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • Java線程阻塞和喚醒的幾種方式詳解

    Java線程阻塞和喚醒的幾種方式詳解

    這篇文章主要介紹了Java線程阻塞和喚醒的幾種方式詳解,線程阻塞是指當(dāng)一個(gè)線程無法繼續(xù)執(zhí)行時(shí),它會(huì)進(jìn)入阻塞狀態(tài),直到某個(gè)條件滿足后才能繼續(xù)執(zhí)行,線程阻塞可以通過多種方式實(shí)現(xiàn),如等待鎖、等待IO操作、等待其他線程的完成等,需要的朋友可以參考下
    2023-10-10
  • Spring EL表示式的運(yùn)用@Value說明

    Spring EL表示式的運(yùn)用@Value說明

    這篇文章主要介紹了Spring EL表示式的運(yùn)用@Value說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評(píng)論

田林县| 凤阳县| 溧水县| 正镶白旗| 新绛县| 渭南市| 焦作市| 天镇县| 靖远县| 曲靖市| 南汇区| 白河县| 修水县| 凯里市| 营口市| 咸丰县| 新闻| 淅川县| 晋城| 鹰潭市| 青神县| 新竹市| 乾安县| 平潭县| 平远县| 民勤县| 新乐市| 平定县| 永吉县| 盐城市| 嘉定区| 津市市| 张家界市| 贵州省| 梁平县| 澄江县| 府谷县| 菏泽市| 乐业县| 临朐县| 如皋市|