Java项目开发中怎么实现分页

这篇“Java项目开发中怎么实现分页”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java项目开发中怎么实现分页”文章吧。

前言

Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用方式也很简单,可本人在工作中除此以外还用到第三种更方便灵活的分页方式,在这里一同分享给大家。

使用

主要分为SpringDataJPA分页、MyBatis分页、Hutools工具类分页几个部分

1、SpringDataJPA分页

1)、引入依赖

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

2)、Service中编写分页服务

SpringDataJPA分页就是定义Pageable对象来处理分页,其中PageRequest来定义分页参数,Page对象来接手查询结果进行分页包装,包装后的结果pageResult可以得到总记录数、总页数、分页列表等数据结果。

/**
 * 根据doctorId查询全部关注列表【分页】
 *
 * @param doctorId 医生id
 * @return 结果集
 */
public Map<String, Object> findAllListByDoctorIdLong doctorId, Integer pageIndex, Integer pageSize) {
    Pageable pageable = PageRequest.ofpageIndex - 1, pageSize); // 分页
    Page<Follow> pageResult = followRepository.findByDoctorIdOrderByCreatedAtDescdoctorId, pageable);
    List<FollowDTO> dtoList = followMapper.toDtopageResult.getContent));
    if !CollectionUtils.isEmptydtoList)) {
        // 处理业务逻辑....
    }
    // 封装分页结果
    Map<String, Object> map = new HashMap<>);
    map.put"pageIndex", pageIndex.toString)); // 当前页
    map.put"pageSize", pageSize.toString)); // 每页条数
    map.put"total", Long.toStringpageResult.getTotalElements))); // 总记录数
    map.put"pages", Integer.toStringpageResult.getTotalPages))); // 总页数
    map.put"list", dtoList); // 数据列表
    return map;
}

3)、Repository中处理分页

这里就是继承JpaRepository对象,然后传入service中定义好的pageable对象,并且返回Page包装的结果即可。

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> findByDoctorIdOrderByCreatedAtDescLong doctorId, Pageable pageable);
}

2、MyBatis分页

1)、引入PageHelper依赖

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

2)、使用PageHelper实现分页

/**
 * 查询推广人员列表,分页。
 * @return 封装的分页结果对象
 */
public PageResult findPromotePersonListString hospitalCode,PromotePersonReq promotePersonReq) {
    Integer pageIndex = promotePersonReq.getPageIndex);
    Integer pageSize = promotePersonReq.getPageSize);
    PageHelper.startPagepageIndex, pageSize); // 每页的大小为pageSize,查询第page页的结果
    List<PromotePerson> list = promotePersonMapper.selectAll);
    PageInfo<PromotePerson> pageInfo = new PageInfo<>list);
    PageHelper.clearPage);
    // 返回分页结果
    PageResult pageResult = new PageResult);
    pageResult.setPageIndexpageIndex);
    pageResult.setPageSizepageSize);
    pageResult.setPagespageInfo.getPages));
    pageResult.setTotalint) pageInfo.getTotal));
    pageResult.setListlist);
    return pageResult;
}

3、Hutools工具类分页

1)、引入依赖

这里是可以单独引入hutools部分工具类的,具体参考官网文档,我平时写项目一定会使用这个工具,所以直接引入了所有。

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

2)、分页实现

一般就用到两个工具类,一是PageUtil.totalPage总记录数, 每页记录数)来计算总页数,二是CollUtil.page索引, 每页记录数, 数据列表)来返回指定分页结果,注意这里的索引是从1开始的,和SpringDataJPA分页索引从0开始有区别。

/**
 * 我的订单-待支付[分页]
 *
 * @param openid 用户唯一标识
 * @return 结果集
 */
public Map<String, Object> findMyOrderNotPayString openid, Integer pageIndex, Integer pageSize) {
    Map<String, Object> map = new HashMap<>);
    // 查询
    List<ConsultOrder> orderList = consultOrderRepository.findMyOrderNotPayopenid);
    if CollectionUtils.isEmptyorderList)) {
            map.put"pageIndex", pageIndex.toString)); // 当前页
            map.put"pageSize", pageSize.toString)); // 每页条数
            map.put"total", "0"); // 总记录数
            map.put"pages", "0"); // 总页数
            map.put"list", new ArrayList<>)); // 数据列表
            return map;
    }
    List<OrderVO> pageList = new ArrayList<>);
    int totalSize = 0;
    int totalPage = 0;
    // 计算总页数
    totalSize = orderList.size);
        totalPage = PageUtil.totalPagetotalSize, pageSize);
    // 分页,索引小于等于总页数,才返回列表.
    if pageIndex <= totalPage) {
            // 分页
            pageList = CollUtil.pagepageIndex, pageSize, orderVOList);
    }
    // 返回结果
    map.put"pageIndex", Integer.toStringpageIndex)); // 当前页
    map.put"pageSize", Integer.toStringpageSize)); // 每页条数
    map.put"total", Integer.toStringtotalSize)); // 总记录数
    map.put"pages", Integer.toStringtotalPage)); // 总页数
    map.put"list", pageList); // 数据列表
    return map;
}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平