若依框架分页原理和代码剖解

本文详细解释了若依系统中后端分页的实现,涉及PageDomain类的使用,以及如何通过PageHelper工具将前端分页参数转化为SQL执行,特别提到了与MyBatis集成的PageHelper组件及其配置。
摘要由CSDN通过智能技术生成

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

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

代码如下

/**
     * 设置请求分页数据
     */
    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的详细结构如下述代码所示。

/**
 * 分页数据
 * 
 * @author ruoyi
 */
public class PageDomain
{
    /** 当前记录起始索引 */
    private Integer pageNum;
 
    /** 每页显示记录数 */
    private Integer pageSize;
 
    /** 排序列 */
    private String orderByColumn;
 
    /** 排序的方向desc或者asc */
    private String isAsc = "asc";
 
    /** 分页参数合理化 */
    private Boolean reasonable = true;
    public static PageDomain buildPageRequest()
    {
        return getPageDomain();

 }
    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
{
    /**
     * 获取String参数
     */
    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方法,我们来看看其执行代码:

/**抽象类:PageMethod中*/
public static <E> com.github.pagehelper.Page<E> startPage(int pageNum, int pageSize, java.lang.String orderBy) {
    return null;
  }


一脸懵逼!

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

<!-- pagehelper 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>


在配置文件application.yml中:

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

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TOGAF 9.2资料大全是企业架构管理领域中非常重要的参考资料之一。TOGAF 9.2是The Open Group企业架构框架创始人联盟发布的最新版本的架构开发方法论。TOGAF 9.2资料大全包括一系列有关企业架构设计、开发、实施和管理的中要信息。 TOGAF 9.2在整个企业架构领域中被广泛认可,它不仅是一种流程方法,也是实现企业架构管理的标准。TOGAF 9.2资料大全覆盖了许多方面,包括架构开发方法、架构内容框架、企业架构能力框架、架构有利于IT管理的模型、架构的完整性与开放性、架构的剖解技术等等。此外,TOGAF 9.2也包括了开发企业架构的过程步骤、建立架构组织的流程等非常实用的方法和工具,可以帮助架构师和企业管理者构建更好的企业架构。 TOGAF 9.2资料大全是企业架构管理的一部分,并不是所有企业或者组织都必须要使用。但是,如果您是一名企业架构师或企业管理者,如果您的工作涉及到架构开发和管理,那么TOGAF 9.2资料大全就是您必须要掌握的资料之一。掌握TOGAF 9.2可以帮助您更好地理解企业架构,更好地管理和发展企业架构,从而提高企业的业务效率和目标的实现。 ### 回答2: TOGAF9.2是一种企业架构框架,它为组织提供一种通过规范化设计、规划、实施和管理企业架构的方法。TOGAF9.2覆盖了战略、业务、数据、应用和技术5个层面,它可以帮助企业管理者和企业架构师更有效地管理业务和IT系统间的连接和关联,从而优化业务过程并增强IT系统的协同效率。 TOGAF9.2资料大全包含了所有使用TOGAF9.2的组织和企业架构师所需的资料和信息,包括TOGAF9.2标准、参考模型、参考模板、工具、案例研究和实践指南等。其中,TOGAF9.2标准是TOGAF9.2的核心,它包括了TOGAF9.2的整体架构、方法论和框架,提出了企业架构设计和管理的一整套最佳实践和标准化方法。 参考模型是TOGAF9.2的重要组成部分,它提供了一个可以用于多种应用的通用架构模型。参考模型中包含了40个业务、数据、应用和技术元素,可以帮助企业架构师更加方便地设计和管理企业架构。 此外,TOGAF9.2资料大全中还包含大量的实践指南和工具,它们可以帮助企业架构师快速掌握TOGAF9.2的使用方法和技巧,从而更加高效地完成企业架构设计和管理工作。 总之,TOGAF9.2资料大全是一份非常宝贵的资源,对于正在使用TOGAF9.2的企业和企业架构师来说,它是不可或缺的工具和参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值