文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

若依框架---PageHelper分页(一)

2023-09-13 19:56

关注

我们简单阐述了若依系统中的分页架构,若依系统中的后端分页主要代码接口的三个特点:

  1. 返回值类型为TableDataInfo
  2. 接口第一行代码startPage()
  3. 接口最后一句:getDataTable(list)

 获取分页参数

我们已经看到了TableDataInfo的数据结构,就是一个分页的数据结构,有total,有rows数据。

今天我们来看看startPage()时执行了什么逻辑。startPage方法位于基类BaseController中。

 代码如下:

    protected 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());            Boolean reasonable = pageDomain.getReasonable();            PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);        }    }

我们逐行来分析。

第一行PageDomain pageDomain = TableSupport.buildPageRequest();,引入了一个新的类PageDomain,这个类又是干嘛的呢?

PageDomain的详细结构如下述代码所示。

public class PageDomain{        private Integer pageNum;        private Integer pageSize;        private String orderByColumn;        private String isAsc = "asc";        private Boolean reasonable = true;

其中包含了pageNum与pageSize分页参数,还有排序列以及排序方式。那么TableSupport.buildPageRequest()是如何获取到这些参数的呢?

其详细代码如下所示。

    public static PageDomain buildPageRequest()    {        return getPageDomain();    }}    public static PageDomain getPageDomain()    {        PageDomain pageDomain = new PageDomain();        pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));        pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));        pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));        return pageDomain;    }

在方法内部,调用了函数 getPageDomain(),在getPageDomain()中,获取请求参数时使用了一个工具类方法:ServletUtils.getParameterToInt,我们再来看看这方法。

public class ServletUtils{        public static String getParameter(String name)    {        return getRequest().getParameter(name);    }    // 其他方法....}

如何便逐层将前端Request的分页参数获取到了对象pageDomain中。

那么分页参数又是如何转换为sql执行的呢?

代码查找

接着研究startPage()方法,后续一句代码为:

String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());

我们来看看这个方法的内部。

    public static String escapeOrderBySql(String value)    {        if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))        {            throw new UtilException("参数不符合规范,不能进行查询");        }        return value;    }

这个方法知识检查order_by sql语句是否合法的。

接着,我们来到了关键的:PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);

其中的startPage方法,我们来看看其执行代码:

public static  com.github.pagehelper.Page startPage(int pageNum, int pageSize, java.lang.String orderBy) {    return null;  }

一脸懵逼!

哦~经过询问度娘,我们知道,这个是一个与mybatis相关的分页工具,叫PageHelper,孤陋寡闻了。

                    com.github.pagehelper            pagehelper-spring-boot-starter        

在配置文件application.yml中:

# PageHelper分页插件pagehelper:   helperDialect: mysql  supportMethodsArguments: true  params: count=countSql 

来源地址:https://blog.csdn.net/m0_58719994/article/details/128883185

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯