PageHelper实现分页查询 实现原理

介绍

我们可以使用sql语句中添加limit关键字的方法实现分页查询,
PageHelper是mybatis框架的分页插件,可以更便捷地实现:我们提供页码和每页条数,自动实现分页效果,收集分页信息

page:当前页码
pageSize:每页显示的条数

PageHelper的分页原理

PageHelper的分页原理就是在程序运行时,通过拦截器在sql语句尾部添加limit关键字,并按照分页信息向limit后追加分页数据

    public JsonPage<Order> getAllOrdersByPage(Integer page, Integer pageSize){
        // PageHelper框架实现分页最核心的代码就是在运行要分页的查询语句之前
        // 通过框架给定的方法设置要分页查询的要求(第几页,每页多少条)
        // 参数page和SpringData框架的设计不同,page为1就是第一页,page为2就是第二页
        PageHelper.startPage(page,pageSize);		`//核心代码`
        // 当上面设置完分页要求后,下面紧随的下一次查询(第一次后面的就没有分页效果了),
        // 就会自动在sql语句末尾添加limit关键字,limit后面的值就是按page,pageSize得出的
        //例如:原sql语句:select * from order_tbl;
        //拦截器处理后语句:select * from order_tbl limit((pageNum-1)*pageSize,pageSize);
        List<Order> list= orderMapper.findAllOrders();
        // list并不是全部的订单的集合,而是按上面分页条件查询出的分页数据
        // 在返回时不直接返回list对象,而是返回PageHelper框架提供的PageInfo类型对象
        // 这个对象可以保存list集合的同时,还能自动计算分页信息
        return JsonPage.restPage(new PageInfo<>(list));
    }

maven添加依赖

注:这种配置要求有连接数据库的配置
在这里插入图片描述
注:如果只需要他的jar包,就用这个配置

编写业务逻辑层

PageInfo对象既包含查询数据结果,又包含分页信息
在这里插入图片描述

 public JsonPage<Order> getAllOrdersByPage(Integer page, Integer pageSize){
        // PageHelper框架实现分页最核心的代码就是在运行要分页的查询语句之前
        // 通过框架给定的方法设置要分页查询的要求(第几页,每页多少条)
        // 参数page和SpringData框架的设计不同,page为1就是第一页,page为2就是第二页
        PageHelper.startPage(page,pageSize);		`这一行是:核心代码`
        // 当上面设置完分页要求后,下面紧随的下一次查询,
        // 就会自动在sql语句末尾添加limit关键字,limit后面的值就是按page,pageSize得出的
        //例如:原sql语句:select * from order_tbl;
        //拦截器处理后语句:select * from order_tbl limit((pageNum-1)*pageSize,pageSize);
        List<Order> list= orderMapper.findAllOrders();
        // list并不是全部的订单的集合,而是按上面分页条件查询出的分页数据
        // 在返回时不直接返回list对象,而是返回PageHelper框架提供的PageInfo类型对象
        // 这个对象可以保存list集合的同时,还能自动计算分页信息
        return JsonPage.restPage(new PageInfo<>(list));
    }

【优化】使用JsonPage返回结果

当前我们分页查询返回的类型是PageInfo
如果用这个类型来做业务逻辑层的返回值当前方法作为dubbo生产者对外提供服务时
消费者调用该服务需要使用PageInfo类型对象来接收,这样要求消费者也添加PageHepler依赖,这是不合理的
所以我们设计在commons模块中,添加一个专门用于返回分页结果的类JsonPage,代替PageInfo
这样当前微服务项目中,所有分页或类似的操作,就都可以使用这个类了
在这里插入图片描述
返回值用JsonPage的接口方法:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值