java 如何实现手动分页(适用于任何场景)

常见的分页方式:


1. 数据全部返给前端,分页功能直接交给前端实现(根据业务场景且仅仅只能用于数据量少的情况)
2. 使用数据库SQL的限制条件,即给搜索语句加上条件,限制查询出来的数据个数(有些业务场景,需要多个联表查询)
3. 使用优秀的插件PageHelper,真的很不错(需要使用在查询语句之前)
4. 代码实现,手动对list 分页。

下面说一下手动分页:

        在我们正常开发中, 会遇到特殊的业务场景,比如说需要在代码中对数据进行一些特殊处理, 才能分页。这个时候就需要我们对数据手动分页。

直接上代码(手动分页的工具类,适用于任何场景):
package com.schdri.bimgis.disaster.domain.util;

import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.stream.Collectors;

public class List2PageInfoUtil {

    /*
     * Discreption: java8 手动对list分页
     * @param: [list, pageNum, pageSize]
     * @return: com.github.pagehelper.PageInfo<T>
     * @author: wangm
     * @date: 2020/5/27 4:30 PM
     */
    public static <T> PageInfo<T> list2PageInfo(Integer pageNum, Integer pageSize, List<T> list) {
        if (pageNum <= 0) {
            pageNum = 1;
        }
        if (pageSize <= 0) {
            pageSize = 10;
        }
        //java8 stream实现list分页
        List<T> pageList = list.stream().skip((pageNum - 1) * pageSize)
                .limit(pageSize)
                .collect(Collectors.toList());
        PageInfo<T> pageInfo = new PageInfo<T>(pageList);
        //获取PageInfo其他参数
        pageInfo.setTotal(list.size());
        int endRow = pageInfo.getEndRow() == 0 ? 0 : (int) ((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
        pageInfo.setEndRow(endRow);
        boolean hasNextPage = list.size() <= pageSize * pageNum ? false : true;
        pageInfo.setHasNextPage(hasNextPage);
        boolean hasPreviousPage = pageNum == 1 ? false : true;
        pageInfo.setHasPreviousPage(hasPreviousPage);
        pageInfo.setIsFirstPage(!hasPreviousPage);
        boolean isLastPage = (list.size() > pageSize * (pageNum - 1) && list.size() <= pageSize * pageNum) ? true : false;
        pageInfo.setIsLastPage(isLastPage);
        int pages = list.size() % pageSize == 0 ? list.size() / pageSize : (list.size() / pageSize) + 1;
        pageInfo.setNavigateLastPage(pages);
        int[] navigatePageNums = new int[pages];
        for (int i = 1; i < pages; i++) {
            navigatePageNums[i - 1] = i;
        }
        pageInfo.setNavigatepageNums(navigatePageNums);
        int nextPage = pageNum < pages ? pageNum + 1 : 0;
        pageInfo.setNextPage(nextPage);
        pageInfo.setPageNum(pageNum);
        pageInfo.setPageSize(pageSize);
        pageInfo.setPages(pages);
        pageInfo.setPrePage(pageNum - 1);
        pageInfo.setSize(pageInfo.getList().size());
        int starRow = list.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
        pageInfo.setStartRow(starRow);
        return pageInfo;
    }
}

有用就点个赞吧 ~~~~

又是摸鱼的一天~~~~~~

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: PageHelper是一款开源的Java分页插件,它能够帮助我们方便地进行分页操作。使用PageHelper插件,我们只需要在查询数据的方法加入分页参数即可实现分页功能,无需手动编写SQL语句进行分页。 在使用PageHelper插件时,我们需要在项目引入PageHelper的依赖包,并在MyBatis的配置文件配置插件。配置完成后,在查询数据时,我们只需要在查询方法添加分页参数即可,PageHelper会自动进行分页,并将分页后的结果集返回给我们。例如: ``` //指定分页参数 PageHelper.startPage(pageNum, pageSize); //调用查询方法 List<User> userList = userDao.getUserList(); //获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(userList); ``` 其,`pageNum`表示当前页码,`pageSize`表示每页显示的记录数。PageHelper会自动根据这两个参数进行分页,并将分页后的结果集返回给我们。我们也可以通过PageInfo对象获取分页信息,如总记录数、总页数等。 使用PageHelper插件可以使我们的分页操作更加方便、简洁,提高开发效率。 ### 回答2: PageHelper是一个基于MyBatis的分页插件,它帮助开发者快速、方便地实现分页功能。通过PageHelper,我们可以快速完成对于大数据量查询结果的分页操作,提高了查询效率和用户体验。 PageHelper的使用非常简便。首先,我们需要在项目的pom.xml文件添加PageHelper的依赖。然后,在MyBatis的配置文件,配置PageHelper的插件。这样,我们就可以在数据库查询时,使用PageHelper提供的工具类进行分页了。 具体的使用方式如下: 1. 在查询方法前,调用PageHelper的startPage方法,设置要查询的页码和每页显示的数量。例如:PageHelper.startPage(1, 10),表示查询第一页,每页显示10条记录。 2. 执行查询操作,PageHelper会在查询结束后自动将结果封装成一个Page对象,该对象包含了查询的结果列表、总记录数等信息。 3. 可以通过Page对象的getTotal()方法获取查询结果的总记录数,可以通过getPageNum()和getPageSize()方法获取当前页码和每页显示数量。 4. 可以通过Page对象的getList()方法获取查询结果的列表。 PageHelper还提供了很多其他的功能,如支持分页插件的属性设置、参数绑定、物理分页、翻页方式选择等。可以根据实际需求进行配置和使用。 总结来说,PageHelper是一个非常好用的分页插件,通过它可以实现快速、方便的分页功能。它提供了丰富的功能和灵活的配置选项,可以满足不同场景下的分页需求。通过合理使用PageHelper,我们可以提高查询效率,优化用户体验。 ### 回答3: PageHelper是一款用于实现数据库分页的开源插件,该插件支持多种数据库,包括MySQL、Oracle、SQL Server等。 使用PageHelper进行分页可以有效地减小内存开销,提高查询效率。通过简单的配置和调用,就可以实现数据的分页查询。 首先,我们需要在项目引入PageHelper的依赖包。然后在MyBatis的配置文件配置PageHelper的插件。 在需要进行分页查询的地方,我们只需要在查询前调用PageHelper的startPage方法即可。startPage方法接收两个参数,分别是当前页码和每页的记录数。例如,startPage(1, 10)表示查询第一页,每页10条记录。 接下来,我们进行数据库查询操作,此时查询的结果就会被自动拦截并进行分页处理。 在查询结果,我们可以通过PageInfo对象获取到分页的详细信息,包括总记录数、总页数、当前页码等。 同时,PageHelper还支持一些其他的功能,例如设置排序规则、获取当前页的前后页码等。 需要注意的是,使用PageHelper进行分页查询时,要确保查询方法的返回类型是Page<E>类型,其E表示查询结果的实体类。 总之,PageHelper是一个简单易用、高效可靠的分页工具,它可以帮助我们快速地实现数据库的分页查询功能。在实际开发,只需要简单地配置和调用,就可以轻松地实现分页功能,提高系统的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值