microblog | 微博客
原创
访问
0
获赞
0
评论
相关推荐
暂无数据
最新文章
暂无数据
热门文章
暂无数据

解决若依框架多次list查询时,分页失效问题

写完bug就找女朋友 2023年10月07日 11:59:32 0 181 0
分类专栏: SpringBoot SpringCloud 文章标签: 若依框架 分页查询

一、问题背景

当若依框架遇到两次及以上的list查询时,会引发分页查询失效问题,如下图:
未命名绘图.drawio.png

二、分析原因

分页查询原理

       Mybatis的分页原理,大致就是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,实现分页查询。

分析原因

若依框架中,使用的是PageHelper分页对象进行分页查询:
       当一次请求涉及到多个list查询时,第一次的list查询会把这个PageHelper分页对象消耗掉,因此后面的查询就无法实现分页查询进而直接查询所有数据.
       当理解了分页原理以及产生上述问题的原因后,解决这个问题不过是信手拈来的事了,具体做法如下:

三、解决办法

  1. 抽离出若依框架的分页插件工具
/** * FileName: PageUtil * Author: WuXingZheng * Date: 2023.9.23 17:00 * Description: 分页工具---解决若依框架多次list查询时,分页失效问题 */ package com.ncjr.common.core.page; import com.github.pagehelper.PageHelper; import com.ncjr.common.utils.StringUtils; import com.ncjr.common.utils.sql.SqlUtil; /** * 分页工具---解决若依框架多次list查询时,分页失效问题 * @author WuXingZheng * @date 2023.9.23 * @version 1.0.0 */ public class PageUtil { public static void startPage() { PageDomain pageDomain = TableSupport.buildPageRequest(); Integer pageNum = pageDomain.getPageNum(); Integer pageSize = pageDomain.getPageSize(); if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); PageHelper.startPage(pageNum, pageSize, orderBy); } } }
  1. 在最后一次查询时,才开启分页查询
    控制器调用:
@GetMapping("/list") @ApiOperation("查询XXX产品列表") public TableDataInfo list(XXXProduct pro) { // startPage(); 在控制器中开启分页查询,会导致后续的分页查询失效,因此不能在控制器中开启分页查询 List<XXXProduct> list = service.selectFinancialLeasingProductList(pro); return getDataTable(list); }

具体实现:

@Override public List<XXXProduct> selectXXXProductList(XXXProduct product) { List<String> organizeIds = utilService.getCurrentUserOrganizeIds(); //最后一次list查询时,才开启分页数据查询,防止分页实失效 PageUtil.startPage(); List<XXXProduct> list = mapper.selectXXXProductList(organizeIds, product); return list; }


评论区

登录后参与交流、获取后续更新提醒

目录
暂无数据