介绍
我们可以使用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的接口方法: