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

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

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

前言

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

使用

主要分為SpringDataJPA分頁(yè)、MyBatis分頁(yè)、Hutools工具類分頁(yè)幾個(gè)部分

1、SpringDataJPA分頁(yè)

1)、引入依賴

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

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

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

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

3)、Repository中處理分頁(yè)

這里就是繼承JpaRepository對(duì)象,然后傳入service中定義好的pageable對(duì)象,并且返回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分頁(yè)

1)、引入PageHelper依賴

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

2)、使用PageHelper實(shí)現(xiàn)分頁(yè)

/**
 * 查詢推廣人員列表,分頁(yè)。
 * @return 封裝的分頁(yè)結(jié)果對(duì)象
 */
public PageResult findPromotePersonList(String hospitalCode,PromotePersonReq promotePersonReq) {
    Integer pageIndex = promotePersonReq.getPageIndex();
    Integer pageSize = promotePersonReq.getPageSize();
    PageHelper.startPage(pageIndex, pageSize); // 每頁(yè)的大小為pageSize,查詢第page頁(yè)的結(jié)果
    List<PromotePerson> list = promotePersonMapper.selectAll();
    PageInfo<PromotePerson> pageInfo = new PageInfo<>(list);
    PageHelper.clearPage();
    // 返回分頁(yè)結(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工具類分頁(yè)

1)、引入依賴

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

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

2)、分頁(yè)實(shí)現(xiàn)

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

/**
 * 我的訂單-待支付[分頁(yè)]
 *
 * @param openid 用戶唯一標(biāo)識(shí)
 * @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)前頁(yè)
            map.put("pageSize", pageSize.toString()); // 每頁(yè)條數(shù)
            map.put("total", "0"); // 總記錄數(shù)
            map.put("pages", "0"); // 總頁(yè)數(shù)
            map.put("list", new ArrayList<>()); // 數(shù)據(jù)列表
            return map;
    }
    List<OrderVO> pageList = new ArrayList<>();
    int totalSize = 0;
    int totalPage = 0;
    // 計(jì)算總頁(yè)數(shù)
    totalSize = orderList.size();
        totalPage = PageUtil.totalPage(totalSize, pageSize);
    // 分頁(yè),索引小于等于總頁(yè)數(shù),才返回列表.
    if (pageIndex <= totalPage) {
            // 分頁(yè)
            pageList = CollUtil.page(pageIndex, pageSize, orderVOList);
    }
    // 返回結(jié)果
    map.put("pageIndex", Integer.toString(pageIndex)); // 當(dāng)前頁(yè)
    map.put("pageSize", Integer.toString(pageSize)); // 每頁(yè)條數(shù)
    map.put("total", Integer.toString(totalSize)); // 總記錄數(shù)
    map.put("pages", Integer.toString(totalPage)); // 總頁(yè)數(shù)
    map.put("list", pageList); // 數(shù)據(jù)列表
    return map;
}

總結(jié)

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

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

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

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

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

相關(guān)文章

  • Android開發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解

    Android開發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解

    這篇文章主要介紹了Android開發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解,是安卓上移動(dòng)互聯(lián)網(wǎng)程序開發(fā)的基礎(chǔ),需要的朋友可以參考下
    2015-12-12
  • springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作

    springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作

    這篇文章主要介紹了springboot 實(shí)現(xiàn)記錄業(yè)務(wù)日志和異常業(yè)務(wù)日志的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring Boot 實(shí)例代碼之通過(guò)接口安全退出

    Spring Boot 實(shí)例代碼之通過(guò)接口安全退出

    這篇文章主要介紹了Spring Boot 實(shí)例代碼之通過(guò)接口安全退出的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • Spring事件監(jiān)聽詳解

    Spring事件監(jiān)聽詳解

    這篇文章主要介紹了Spring事件監(jiān)聽詳解,文中有非常詳細(xì)的圖文解說(shuō)及代碼示例,對(duì)正在學(xué)習(xí)java Spring的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Spring boot集成Kafka+Storm的示例代碼

    Spring boot集成Kafka+Storm的示例代碼

    這篇文章主要介紹了Spring boot集成Kafka+Storm的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 分享Spring的下載組件

    分享Spring的下載組件

    這篇文章主要為大家分享了Spring的下載組件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Spring在多線程環(huán)境下如何確保事務(wù)一致性問(wèn)題詳解

    Spring在多線程環(huán)境下如何確保事務(wù)一致性問(wèn)題詳解

    這篇文章主要介紹了Spring在多線程環(huán)境下如何確保事務(wù)一致性問(wèn)題詳解,說(shuō)到異步執(zhí)行,很多小伙伴首先想到Spring中提供的@Async注解,但是Spring提供的異步執(zhí)行任務(wù)能力并不足以解決我們當(dāng)前的需求,需要的朋友可以參考下
    2023-11-11
  • SpringBoot工程下使用OpenFeign的坑及解決

    SpringBoot工程下使用OpenFeign的坑及解決

    這篇文章主要介紹了SpringBoot工程下使用OpenFeign的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • IntelliJ IDEA2020.1 Mac maven sdk 全局配置

    IntelliJ IDEA2020.1 Mac maven sdk 全局配置

    這篇文章主要介紹了IntelliJ IDEA2020.1 Mac maven sdk 全局配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 淺談java面向?qū)ο蟮臄?shù)組化信息處理

    淺談java面向?qū)ο蟮臄?shù)組化信息處理

    下面小編就為大家?guī)?lái)一篇淺談java面向?qū)ο蟮臄?shù)組化信息處理。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論

长武县| 南江县| 铁岭县| 墨竹工卡县| 博白县| 长宁县| 宁明县| 固原市| 金昌市| 湟中县| 工布江达县| 澄江县| 濮阳市| 策勒县| 横峰县| 乌兰县| 定安县| 吉首市| 安阳市| 吴忠市| 瑞金市| 沾益县| 嘉荫县| 搜索| 泗洪县| 岑巩县| 延边| 屯昌县| 禄丰县| 凤阳县| 龙州县| 罗田县| 军事| 连山| 寻甸| 永年县| 崇文区| 西宁市| 泾阳县| 南华县| 三亚市|