MyBatis分页插件PageHelper

一、分页的三种思路

1.纯js实现分页。

一次性查询记录并加载到html的table中,然后通过选择性地显示某些行来达到分页显示的目的。(首先:用table来显示查询出来的记录们,全部显示。 然后,在JS中修改table中某些行显示,某些行隐藏。)这是一种伪分页,只能用于数据少的情况下。一旦数据多了,十几万条数据加载到html中会变得很慢。而且不实时,一次加载完后数据就写死在页面了,若数据库中有变化,浏览器端显示的仍是上次加载过来的数据。

2.一次查询,分批显示。

我们可以执行一个数据库查询操作,得到结果集。然后,通过指针的移动来显示当前页面的记录。(当前页面号*每页记录数)定位到当前页的第一条记录,然后通过while循环显示n条记录(n为每页显示记录数)。在跳页时,只需修改currentPage,即可在重定位到下一页时把当前页面号改掉,重新定位记录指针,通过while遍历显示n条记录。与JS选择性显示不同,这里是选择性遍历。与JS分页不同的是,这里分页每次跳页修改的是遍历的指针,每次跳页都要进行一次全面查询。同样地,不适合大数据量查询。这里比JS分页优化的地方在于——实时性。每次跳页都会查询一次数据库,保证数据的实时性。

3.在服务端分页。跳到第n页才查询、显示第n页内容。

要点就是根据客户端表格的“页面”计算出数据库要查询的当前页面的第一条记录的位置。优点:实时性:跳页才查询。数据量小:只加载当前页的记录进行显示。重点在于两条语句:select count(*) from ...:查询得到记录总条数select * from .. limit pageNo,rowsCount:查询从第pageNo条开始的rowsCount条数据。

二、MyBatis分页插件PageHelper

分页
总页数、每页多少条、当前页数、记录总数

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。
 public PageInfo<PersonInfoDto> queryPersonInfo(PersonRequest request, PageInfo pageInfo){
          //pageNum  页码pageSize 每页显示数量
        Page<PersonInfoDomain> page = PageHelper.startPage(pageInfo.getPageNum(), pageInfo.getPageSize());
        List<PersonInfoDomain> list = personInfoDao.selectPersonInfo(request);
        PageInfo<PersonInfoDto> personInfoDtoPageInfo = new PageInfo<PersonInfoDto>(page.getPageNum(), page.getPageSize(), page.getTotal());
        personInfoDtoPageInfo.setList(PersonInfoConverter.toPersonInfoDto(list));
        return personInfoDtoPageInfo;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值