PageHelper实现多条件的分页查询,封装页码按钮的生成逻辑,对接后端接口

您所在的位置:网站首页 pagehelper分页工具类封装 PageHelper实现多条件的分页查询,封装页码按钮的生成逻辑,对接后端接口

PageHelper实现多条件的分页查询,封装页码按钮的生成逻辑,对接后端接口

2024-07-09 21:58| 来源: 网络整理| 查看: 265

效果图

难点分析

PageHelper的引入和使用,这里我就不多说了。有了PageHelper,后端的分页查询就非常简单了。

要实现携带多条件的分页查询,前端要如何跟后端接口对接呢?在开始代码之前,先来依次思考和分析下面的问题,然后再来整理思路,最后看代码。

问题1:前端需要传给后端什么参数?

(1)page:当前页。理应由前端传给后端,但是前端的传参有可能超出实际范围(比如说,一共才有10页,用户传参11,那么后端应该返回第10页的数据,而不应该返回空数据),这就必须交由后端来纠正之后,再查询对应页码的数据。然后后端将纠正后的当前页返回给前端, 以便前端来渲染页码按钮组。如果不传,由后端返回默认值1。

(2)count:每页显示的记录数,由前端传给后端。如果不传,使用后端定义的默认值。

(3)各种条件参数。以上面的效果图为例,需要传给后端 4 个条件参数:① 商品名称关键词:prodName;②商品种类:cate;③最低价格:minPrice;④最高价格:maxPrice。

问题2:条件以什么方式提交给后端?        

  前端访问后端接口有 3 种情况,以效果图为例分析:

(1)第一次打开页面,以Get方式,此时没有携带任何条件

(2)点击 “查询” 按钮,以Post方式提交表单,此时携带多个条件,且有些提交可能为空

(3)点击页码按钮切换页面时,由于是通过a标签跳转,所以是Get方式。跳转时,有可能携带多个条件。

   所以接口需要使用 @RequestMapping 注解

问题3:后端应该返回什么数据给前端?

(1)当前页的列表数据。如:List

(2)page:被后端纠正之后的当前页。用于生成分页按钮。

(3)total:总记录数。用于生成分页按钮。

(4)count:每一页显示的记录数,也有可能被后端纠正。用于生成分页按钮。

(5)urlParamsStr:由于点击页码按钮时,通过a标签跳转,可能需要携带多个条件,而且只能通过url参数的形式携带过去。所以后端需要将多个条件拼接成字符串,返回给前端,方便前端生成分页按钮。

问题4:生成页码按钮需要什么参数?如何封装页码按钮的逻辑?

(1)page:被后端纠正之后的当前页。用于生成分页按钮。

(2)total:总记录数。用于生成分页按钮。

(3)count:每一页显示的记录数,也有可能被后端纠正。用于生成分页按钮。

要想生成页码按钮,上面3个参数,必不可少!!!至于页码按钮的生成逻辑,参见我的另一篇博客:https://blog.csdn.net/qq_43290318/article/details/111601738。

后端代码 controller层 package easymall.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import easymall.po.Products; import easymall.pojo.ProdListReqParamsVo; import easymall.service.ProductsService; @Controller("productsController") public class ProductsController { @Autowired private ProductsService productsService; /** * 该接口必须支持post和get方式访问 * 因为表单提交是post方式,而第一次打开页面和点击页码切换页面都是get方式 * * @param page 当前页。分页所需参数,如果前端不传,则默认为1 * @param count 每页显示多少条记录。分页所需参数,如果前端不传,则默认为2 */ @RequestMapping("/prodlist") public String prodlist(@ModelAttribute("params") ProdListReqParamsVo params, Integer page, Integer count, Model model) { // 参数检查和纠正 if (!ObjectUtils.isEmpty(params.getMinPrice()) && !ObjectUtils.isEmpty(params.getMaxPrice())) { // 纠正 minPrice为非负数 if (params.getMinPrice() < 0) { params.setMinPrice(0d); } // 纠正为 minPrice params.getMaxPrice()) { double min = params.getMinPrice(); params.setMinPrice(params.getMaxPrice()); params.setMaxPrice(min); } } // curPage 是否越界,可不需要判断,PageHelper内部会判断并纠正 if (ObjectUtils.isEmpty(page)) { page = 1; } if (ObjectUtils.isEmpty(count) || count


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3