Question Description

使用JAVA语言的若依框架的时候,发现只要使用了startPage()函数, 并不需要前端传递分页的数据,也不需要注解,就能完成分页功能。预判他应该是使用类似拦截器的机制,但还是感觉很神奇,感觉知道个大概不过瘾,还是要更细致的了解才能满足,就想研究一下并记录下来。

/**
* 查询test用户管理列表
*/
@RequiresPermissions("user:manage:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(TUser tUser)
{
startPage();
// 获取 t_table1 表数据
List<T_table1> list = T_table1Service.selectT_table1List(new T_table1());
return getDataTable(list);
}
开启 startPage()函数
17:43:42.395 [http-nio-80-exec-26] DEBUG c.r.k.m.T.selectTProductList - [debug,137] - ==> Preparing: select * from t_table1 LIMIT ?
17:43:42.396 [http-nio-80-exec-26] DEBUG c.r.k.m.T.selectTProductList - [debug,137] - ==> Parameters: 10(Integer)
17:43:42.429 [http-nio-80-exec-26] DEBUG c.r.k.m.T.selectTProductList - [debug,137] - <== Total: 10 关掉 startPage()函数
17:53:13.356 [http-nio-80-exec-12] DEBUG c.r.k.m.T.selectTProductList - [debug,137] - ==> Preparing: select * from t_table1
17:53:13.357 [http-nio-80-exec-12] DEBUG c.r.k.m.T.selectTProductList - [debug,137] - ==> Parameters:
17:53:13.371 [http-nio-80-exec-12] DEBUG c.r.k.m.T.selectTProductList - [debug,137] - <== Total: 53

使用startPage()之后,去执行SQL查询的语句就会不同,那么问题来了,他是怎么关联上查询语句的? , 怎么能自动的给查询语句自动加上 LIMIT 条件的 ?

Principle

若依框架(RuoYi)是一个WEB框架,主要作用是用于开发后台管理系统,该框架内置了一些常用的功能模块,比如 分页功能、...。

若依框架中的分页功能是通过使用 MyBatis 分页插件实现的。MyBatis 是一款流行的持久层框架,它提供了对数据库的访问和操作功能,并且支持插件扩展。

在若依框架中,当你调用 startPage() 函数时,它会利用 MyBatis 分页插件拦截 SQL 查询语句,并自动解析出分页相关的信息,如当前页码、每页显示的记录数等。然后,它会在查询语句中添加相应的 SQL 片段,实现分页查询。

具体而言,startPage() 函数会将分页信息存储在一个线程本地的 PageHelper 对象中。该对象使用了线程本地变量,确保每个线程独立维护自己的分页信息,避免了多线程并发时的混淆。

当执行数据库查询时,分页插件会拦截查询语句,根据 PageHelper 对象中保存的分页信息,动态生成对应的分页 SQL,并在查询数据库时应用该 SQL,从而只返回分页后的结果数据。

总结一下,若依框架的分页功能是通过 MyBatis 分页插件实现的。它利用了 MyBatis 拦截器机制,在查询语句执行前动态生成分页 SQL,从而在不需要前端传递分页数据注解的情况下,实现了简便的分页功能。

Reference

若依官网——分页实现

https://doc.ruoyi.vip/ruoyi/document/htsc.html#分页实现

若依框架---分页功能

https://blog.51cto.com/u_15949848/6056021

童小纯呀 若依框架---PageHelper分页(一) ~ (十五)

https://blog.51cto.com/search/user?uid=15939848&q=若依框架---PageHelper分页

若依框架的startPage( )函数怎么自动关联查询SQL语句?的更多相关文章

  1. 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划

    1.问题        通过调用dbms_xplan包中DISPLAY_AWR函数(DBMS_XPLAN.DISPLAY_AWR)可以从AWR数据中查看到SQL语句的历史执行计划,但是,DISPLAY ...

  2. 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明

    一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...

  3. Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题

    在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public ...

  4. 在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)

    原文:在论坛中出现的比较难的sql问题:19(row_number函数 行转列.sql语句记流水) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记 ...

  5. 使用Entity Framework 自动产生的Sql语句

    对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...

  6. @InsertProvider 根据bean属性,自动生成插入sql语句

    以Test为例,用mybatis的@InsertProvider的注解插入数据的时候,每次都要写类似于 Mapper类 @Mapper public interface TestDao { @Inse ...

  7. EF-记录程序自动生成并执行的sql语句日志

    在EntityFramework的CodeFirst模式中,我们想将程序自动生成的sql语句和执行过程记录到日志中,方便以后查看和分析. 在EF的6.x版本中,在DbContext中有一个Databa ...

  8. python操作MySQL,SQL注入的问题,SQL语句补充,视图触发器存储过程,事务,流程控制,函数

    python操作MySQL 使用过程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 由于能操作MySQL的模块是第三方模块,我们需要pip安装. pip3 insta ...

  9. SQL语句操作数据与一些函数使用的丰富数据库

    数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...

  10. SQL 语句常用函数

    一.字符转换函数 1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CH ...

随机推荐

  1. 【HMS Core】Health Kit查询历史数据查询数据和返回数据不一致

    [问题描述] 查询一个月运动记录,只能查询到最早5月26的数据,但是华为健康app里的数据最早为5月8日,为什么会查询不到? [解决方案] 1.需要检查是否申请了历史数据权限,查询数据时,出于对用户的 ...

  2. 【翻译】高效numpy指北

    ref:link why numpy 运算高效 numpy 内存结构 一块内存区域 dtype 确定了内存区域数据类型 metadata 比如 shape.strides etc 注:numpy 内存 ...

  3. 1. Mybatis 简介

    1. Mybatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code.随着 ...

  4. 常见的Web安全攻击类型及其应对方法

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 5. 优化与改进 6. 结论与展望 7. 附录:常见问题与解答 常见的Web安全攻击类型及其应对方法 随着网 ...

  5. 逍遥自在学C语言 | 函数初级到高级解析

    前言 函数是C语言中的基本构建块之一,它允许我们将代码组织成可重用.模块化的单元. 本文将逐步介绍C语言函数的基础概念.参数传递.返回值.递归以及内联函数和匿名函数. 一.人物简介 第一位闪亮登场,有 ...

  6. Oracle将用户权限移植到另一个用户上

    问题描述:往往有些需求,A用户依赖于B用户创建,A用户想要获取B用户的权限,oracle没找到有命令可以直接继承,只能写一些语句来代替 1.查询用户下的权限有哪些 SET PAGESIZE 100 S ...

  7. HCL实验:4.同一vlan位于不同交换机上的通信

    拓扑图 SW1配置 SW2配置 SW3配置 VLAN 1 PC1 PING PC5 VLAN 2 PC 2 PING PC 6 VLAN 3 PC4 PING PC8 怀疑是模拟器的问题---- 不知 ...

  8. Pychrm自定义代码块

    Pycharm -> Perferences (command + ,)

  9. 给SqlSugar一个优化建议

    声明:本作者无恶意只是觉得这个功能很不错,平常工作当中经常用到,自己框架也做了相应的支持,本着技术共享目的. 一.对象组合设置列更新支持 建议度:高 业务场景 1.更新列表需统一设置 例如:修改人ID ...

  10. 开发自己的Prometheus Exporter、实现自定义指标

    Prometheus Exporter基础知识 Prometheus Exporter的概念.工作原理  Prometheus Exporter是一个用来收集和暴露指标数据的工具,通过与Prometh ...