关于ssm:SSM项目踩坑-前端请求获取不了分页内容

4次阅读

共计 1815 个字符,预计需要花费 5 分钟才能阅读完成。


author: Nathannie
date: 2022-04-16-22:58


问题背景

学习 SSM 我的项目,指标是点击前端店铺二级分类按钮,获取此分类对应 shopCategoryId 下的所有店铺信息列表,但点击无果,始终停留在期待刷新页面,解决甚久,破费一下午。

报错信息

报错截图:

问题剖析

始终期待刷新,猜测获取不到数据,借此机会,决定从头到尾的钻研一下此性能的实现过程,最初发现的确是获取不到数据,但不是没有数据,而是获取形式谬误。
此分类下的内容须要分页展现(以动静刷新的形式),设置分页逻辑代码编写谬误,使得获取的数据的索引(Index)超过实在数据(index)范畴。

回顾分页逻辑:

rowIndex = (PageIndex-1) x PageSize

即示意按所需 分页页数 分页单页数据个数 失去的某页的首个数据项所在的索引地位。艰深来说,依照每页 PageSize 个数据项,获取第 PageIndex 页的第一个数据项的索引地位示意。
图示:

⚠️留神:页数是依照,1,2,3.. 的逻辑开始,而行数(索引)是依照 0,1,2,3… 的逻辑开始,所以索引为 0 的行,事实中的了解逻辑为第 1 行,索引为 3 的行,事实了解逻辑为第 4 行。

上述图的索引为 5 的行,事实逻辑就为第 6 行。

上述算法能够由 RowIndex,pageSize 失去 PageIndex(第几页),由 PageSize,PageIndex 失去 PageIndex 页的首行数据项索引(在所有数据中占第几行)。

问题解决

次要起因是转化算法,参数写错了
谬误的代码:

//          将 pageIndex 转为 rowIndex
int rowIndex = PageCalculator.calculateRowIndex(pageIndex, pageSize);
//        调用办法获取 shopList,count
List<Shop> shopList = shopDao.queryShopList(shopCondition, PageIndex, pageSize);
                                                              ↑
                                                  这里应该是计算后的 rowIndex 

正确的代码:

//        将 pageIndex 转为 rowIndex
        int rowIndex = PageCalculator.calculateRowIndex(pageIndex, pageSize);
//        调用办法获取 shopList,count
        List<Shop> shopList = shopDao.queryShopList(shopCondition, rowIndex, pageSize);

上述 pageIndex,pageSize 是前端传递的参数,这里为1,3

通过上述剖析,理论数据库中数据只有一条:

依照错误代码的查问形式,则是“从第 2 行数据开始,查问 3 条数据”显然是没有的(没有第二行,也没有三个数据)

查问代码:

SELECT s.shop_id, s.shop_name, s.shop_desc, s.shop_addr, s.phone
    , s.shop_img, s.priority, s.create_time, s.last_edit_time, s.enable_status
    , s.advice, a.area_id, a.area_name, sc.shop_category_id, sc.shop_category_name
FROM tb_shop s, tb_area a, tb_shop_category sc
WHERE s.shop_category_id = 22
    AND s.shop_category_id IN (
        SELECT shop_category_id
        FROM tb_shop_category
        WHERE parent_id = 12
    )
    AND s.shop_category_id = sc.shop_category_id
    AND s.area_id = a.area_id
ORDER BY s.priority DESC
-- LIMIT 1,3
LIMIT 0, 3

LIMIT 0, 3这才是正确的分页参数。依照 LIMIT 1,3 这个形式天然查不出数据。

⚠️本次问题最终是通过手动复制 mapper的查问代码到数据库管理软件 (Navcat) 中进行查问验证是否查问 sql 有问题。因而为解决相似问题提供了一个思路:有问题从三层思考:前端申请,业务解决,数据拜访(sql 语句)。

相干参考

  • https://www.yiibai.com/sql/sq…
  • https://blog.csdn.net/liu_fen…
正文完
 0