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

Java項目開發(fā)中實現(xiàn)分頁的三種方式總結(jié)

 更新時間:2022年02月06日 08:57:12   作者:福隆苑居士  
這篇文章主要給大家介紹了關(guān)于Java項目開發(fā)中實現(xiàn)分頁的三種方式,通過這一篇文章可以很快的學(xué)會java分頁功能,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

Java項目開發(fā)中經(jīng)常要用到分頁功能,現(xiàn)在普遍使用SpringBoot進行快速開發(fā),而數(shù)據(jù)層主要整合SpringDataJPA和MyBatis兩種框架,這兩種框架都提供了相應(yīng)的分頁工具,使用方式也很簡單,可本人在工作中除此以外還用到第三種更方便靈活的分頁方式,在這里一同分享給大家。

使用

主要分為SpringDataJPA分頁、MyBatis分頁、Hutools工具類分頁幾個部分

1、SpringDataJPA分頁

1)、引入依賴

<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2)、Service中編寫分頁服務(wù)

SpringDataJPA分頁就是定義Pageable對象來處理分頁,其中PageRequest來定義分頁參數(shù),Page對象來接手查詢結(jié)果進行分頁包裝,包裝后的結(jié)果pageResult可以得到總記錄數(shù)、總頁數(shù)、分頁列表等數(shù)據(jù)結(jié)果。

/**
 * 根據(jù)doctorId查詢?nèi)筷P(guān)注列表【分頁】
 *
 * @param doctorId 醫(yī)生id
 * @return 結(jié)果集
 */
public Map<String, Object> findAllListByDoctorId(Long doctorId, Integer pageIndex, Integer pageSize) {
    Pageable pageable = PageRequest.of(pageIndex - 1, pageSize); // 分頁
    Page<Follow> pageResult = followRepository.findByDoctorIdOrderByCreatedAtDesc(doctorId, pageable);
    List<FollowDTO> dtoList = followMapper.toDto(pageResult.getContent());
    if (!CollectionUtils.isEmpty(dtoList)) {
        // 處理業(yè)務(wù)邏輯....
    }
    // 封裝分頁結(jié)果
    Map<String, Object> map = new HashMap<>();
    map.put("pageIndex", pageIndex.toString()); // 當(dāng)前頁
    map.put("pageSize", pageSize.toString()); // 每頁條數(shù)
    map.put("total", Long.toString(pageResult.getTotalElements())); // 總記錄數(shù)
    map.put("pages", Integer.toString(pageResult.getTotalPages())); // 總頁數(shù)
    map.put("list", dtoList); // 數(shù)據(jù)列表
    return map;
}

3)、Repository中處理分頁

這里就是繼承JpaRepository對象,然后傳入service中定義好的pageable對象,并且返回Page包裝的結(jié)果即可。

import com.patient.domain.Follow;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
 
@Repository
public interface FollowRepository extends JpaRepository<Follow, Long> {
 
    Page<Follow> findByDoctorIdOrderByCreatedAtDesc(Long doctorId, Pageable pageable);
}

2、MyBatis分頁

1)、引入PageHelper依賴

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

2)、使用PageHelper實現(xiàn)分頁

/**
 * 查詢推廣人員列表,分頁。
 * @return 封裝的分頁結(jié)果對象
 */
public PageResult findPromotePersonList(String hospitalCode,PromotePersonReq promotePersonReq) {
    Integer pageIndex = promotePersonReq.getPageIndex();
    Integer pageSize = promotePersonReq.getPageSize();
    PageHelper.startPage(pageIndex, pageSize); // 每頁的大小為pageSize,查詢第page頁的結(jié)果
    List<PromotePerson> list = promotePersonMapper.selectAll();
    PageInfo<PromotePerson> pageInfo = new PageInfo<>(list);
    PageHelper.clearPage();
    // 返回分頁結(jié)果
    PageResult pageResult = new PageResult();
    pageResult.setPageIndex(pageIndex);
    pageResult.setPageSize(pageSize);
    pageResult.setPages(pageInfo.getPages());
    pageResult.setTotal((int) pageInfo.getTotal());
    pageResult.setList(list);
    return pageResult;
}

3、Hutools工具類分頁

1)、引入依賴

這里是可以單獨引入hutools部分工具類的,具體參考官網(wǎng)文檔,我平時寫項目一定會使用這個工具,所以直接引入了所有。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.1.2</version>
</dependency>

2)、分頁實現(xiàn)

一般就用到兩個工具類,一是PageUtil.totalPage(總記錄數(shù), 每頁記錄數(shù))來計算總頁數(shù),二是CollUtil.page(索引, 每頁記錄數(shù), 數(shù)據(jù)列表)來返回指定分頁結(jié)果,注意這里的索引是從1開始的,和SpringDataJPA分頁索引從0開始有區(qū)別。

/**
 * 我的訂單-待支付[分頁]
 *
 * @param openid 用戶唯一標識
 * @return 結(jié)果集
 */
public Map<String, Object> findMyOrderNotPay(String openid, Integer pageIndex, Integer pageSize) {
    Map<String, Object> map = new HashMap<>();
    // 查詢
    List<ConsultOrder> orderList = consultOrderRepository.findMyOrderNotPay(openid);
    if (CollectionUtils.isEmpty(orderList)) {
            map.put("pageIndex", pageIndex.toString()); // 當(dāng)前頁
            map.put("pageSize", pageSize.toString()); // 每頁條數(shù)
            map.put("total", "0"); // 總記錄數(shù)
            map.put("pages", "0"); // 總頁數(shù)
            map.put("list", new ArrayList<>()); // 數(shù)據(jù)列表
            return map;
    }
    List<OrderVO> pageList = new ArrayList<>();
    int totalSize = 0;
    int totalPage = 0;
    // 計算總頁數(shù)
    totalSize = orderList.size();
        totalPage = PageUtil.totalPage(totalSize, pageSize);
    // 分頁,索引小于等于總頁數(shù),才返回列表.
    if (pageIndex <= totalPage) {
            // 分頁
            pageList = CollUtil.page(pageIndex, pageSize, orderVOList);
    }
    // 返回結(jié)果
    map.put("pageIndex", Integer.toString(pageIndex)); // 當(dāng)前頁
    map.put("pageSize", Integer.toString(pageSize)); // 每頁條數(shù)
    map.put("total", Integer.toString(totalSize)); // 總記錄數(shù)
    map.put("pages", Integer.toString(totalPage)); // 總頁數(shù)
    map.put("list", pageList); // 數(shù)據(jù)列表
    return map;
}

總結(jié)

1)、注意 :為了方便演示代碼中直接用了Map對象來包裝返回分頁結(jié)果,在實際項目中,切記一定要自己定義實體對象作為返回結(jié)果,因為Map對象返回的結(jié)果如果是動態(tài)且數(shù)據(jù)量較大的列表,是存在造成內(nèi)存泄露風(fēng)險的,舉個例子,比如返回10條問診的分頁記錄時,其中聊天內(nèi)容這個屬性包含大量聊天數(shù)據(jù),因為你無法確定對話的兩個人到底聊了多少,可它確實作為一個屬性包含在分頁記錄中;

2)、SpringDataJPA分頁,就是使用自帶的Pageable對象來處理,需要注意的是分頁索引從0開始,傳錯了會造成分頁結(jié)果錯亂或重復(fù)的現(xiàn)象;

3)、Mybatis分頁,就是借助PageHelper工具來實現(xiàn),PageHelper.startPage和PageHelper.clearPage中間是需要分頁的業(yè)務(wù)查詢代碼,可以通過PageInfo對象包裝,獲取其中需要的分頁參數(shù)返回給前端展示;

4)、Hutools分頁,就是引入hutools工具類,使用其中的PageUtil和CollUtil工具類來實現(xiàn),這種方式我個人比較喜歡,因為在較復(fù)雜的查詢業(yè)務(wù)中,前兩種實現(xiàn)起來很費勁還容易寫錯,不僅可能牽扯到多個類及方法,寫完后過段時間也不容易閱讀。而Hutools分頁就類似于很早以前的分頁方式,我把它理解為綠色簡易版JSP分頁,只需在服務(wù)層使用一個工具類分頁即可,既靈活又便于閱讀,簡直是分頁的神器。

到此這篇關(guān)于Java項目開發(fā)中實現(xiàn)分頁的三種方式的文章就介紹到這了,更多相關(guān)Java實現(xiàn)分頁的三種方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java_object的簡單使用詳解

    java_object的簡單使用詳解

    下面小編就為大家?guī)硪黄猨ava_object的簡單使用詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 簡單了解Java中的可重入鎖

    簡單了解Java中的可重入鎖

    這篇文章主要介紹了簡單了解Java中的可重入鎖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • intellij idea使用git stash暫存一次提交的操作

    intellij idea使用git stash暫存一次提交的操作

    這篇文章主要介紹了intellij idea使用git stash暫存一次提交的操作,具有很好的參考價值希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • webuploader+springmvc實現(xiàn)圖片上傳功能

    webuploader+springmvc實現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細介紹了webuploader+springmvc實現(xiàn)圖片上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 聊聊Java三種常見的分布式鎖

    聊聊Java三種常見的分布式鎖

    目前分布式鎖的實現(xiàn)方案主要包括三種,本文就來介紹一下這三種常見的分布式鎖以及這三種鎖的性能等,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06
  • SpringBoot用配置影響B(tài)ean加載@ConditionalOnProperty

    SpringBoot用配置影響B(tài)ean加載@ConditionalOnProperty

    這篇文章主要為大家介紹了SpringBoot用配置影響B(tài)ean加載@ConditionalOnProperty示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java 中EasyExcel的使用方式

    Java 中EasyExcel的使用方式

    這篇文章主要介紹了Java 中EasyExcel的使用方式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • 詳解SpringBoot與SpringCloud的版本對應(yīng)詳細版

    詳解SpringBoot與SpringCloud的版本對應(yīng)詳細版

    這篇文章主要介紹了詳解SpringBoot與SpringCloud的版本對應(yīng)詳細版,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Mac電腦安裝多個JDK版本的詳細圖文教程

    Mac電腦安裝多個JDK版本的詳細圖文教程

    目前使用的主流版本還是JDK 8,但偶爾會想體驗下新版本(或者舊版本),如果能裝多個版本的JDK,而且很方便的切換就好了,這篇文章主要給大家介紹了關(guān)于Mac電腦安裝多個JDK版本的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 妙用Java8中的Function接口消滅if...else

    妙用Java8中的Function接口消滅if...else

    在開發(fā)過程中經(jīng)常會使用if...else...進行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼中嚴重影響了代碼代碼的美觀,本文就妙用Java8中的Function接口消滅if...else,感興趣的可以了解一下
    2022-01-01

最新評論