分页查询
分页查询的优点
所谓分页,就是查询结果数据较多时,采用按页显示的方法,而不是一次性全部显示
分页的优点:
- 服务器:一次性查询所有信息,服务器压力大,分页查询服务器压力小
- 客户端:一次性显示所有信息,需要更多流量,加载时间也会更长,分页显示没有这个问题
- 用户体验上:一般最有价值的信息都会在前几页显示,也方便用户记忆,多查询出来的数据使用几率很低
实现分页查询需要我们开发过程中多几个步骤
PageHelper实现分页查询
我们可以使用sql语句中添加limit关键字的方法实现分页查询
但是查询分页内容时,我们要自己计算相关的分页信息和参数
limit 0,10 limit 10,10
分页逻辑无论什么业务都是类似的,所以有框架帮助我们高效实现分页功能
PageHelper框架可以实现我们提供页码和每页条数,自动实现分页效果,收集分页信息
PageHelper的分页原理就是在程序运行时,在sql语句尾部添加limit关键字,并按照分页信息向limit后追加分页数据
要想使用,首先还是添加依赖
我们在之前搭建的微服务项目中先编写学习,建议使用csmall-order模块
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
在添加seata支持时已经添加了pagehepler依赖
PageHelper的基本使用
先编写持久层
我们使用csmall-order-webapi模块来完成分页的测试
首先编写分页的持久层mapper,持久层功能是全查所有订单信息
OrderMapper添加方法
// 分页查询全部订单
// PageHelper框架是自动在sql语句后添加limit关键字实现分页的
// 因为这个特性,我们编写的查询语句,和不分页时是一样的
@Select("select id,user_id,commodity_code,count,money from order_tbl")
List<Order> findAllOrders();
注意这个方法并不需要任何分页的参数或返回值,sql也不需要编写limit
都是在业务逻辑层中由PageHelper框架处理的
编写业务逻辑层
下面就转到业务逻辑层实现类,先编写一个方法使用PageHelper的功能
先不用写接口,直接在业务逻辑层中写方法
OrderServiceImpl添加方法
// 分页查询所有订单的方法
// page 是页码
// pageSize 是每页条数
public PageInfo<Order> getAllOrdersByPage(Integer page,Integer pageSize){
// PageHepler框架实现分页最核心的代码就是在运行要分页的查询语句之前
// 通过框架给定的方法设置要分页查询的要求(第几页,每页多少条)
// 参数page和SpringData框架的设计不同,page为1就是第一页,page为2就是第二页
PageHelper.startPage(page,pageSize);
// 当上面设置完分页要求后,下面紧随的下一次查询,
// 就会自动在sql语句末尾添加limit关键字,limit后面的值就是按page,pageSize得出的
List<Order> list= orderMapper.findAllOrders();
// list并不是全部的订单的集合,而是按上面分页条件查询出的分页数据
// 在返回时不直接返回list对象,而是返回PageHelper框架提供的PageInfo类型对象
// 这个对象可以保存list集合的同时,还能自动计算分页信息
return new PageInfo<>(list);