首页 > 数据库 >若依框架的startPage( )函数怎么自动关联查询SQL语句?

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

时间:2023-09-28 09:33:21浏览次数:42  
标签:分页 框架 查询 若依 startPage SQL

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
From: https://www.cnblogs.com/mysticbinary/p/17238886.html

相关文章

  • 一次执行10天的SQL(数据库练习)
    一次执行10天的SQL原创 薛晓刚 四海内皆兄弟 2023-09-1507:01 发表于上海收录于合集#开发理念54个#Oracle57个#MYSQL46个  子查询和关联查询过多的危害(从前标量子查询那篇文章的延续)     子查询过多(很有可能不少都是不必要的,或者设计导致的)会导......
  • 软件测试 - - - 测试数据库mysql
    连接数据库,navicat连接数据库   多使用软件。而不只是记载记笔记。去使用软件。去使用navicat。软件测试 --- 测试数据库dbeaverUltimate有免费的社区版本workbench这是官方做的软件。navicat需要收费,如果破解,大公司会受到律师函。 输入URL,连接数据库,host主机......
  • postgresql临时表
    PostgreSQL中的临时表分两种,一种是会话级临时表,一种是事务级临时表。在会话级临时表中,数据可以存在于整个会话的生命周期中,在事务级临时表中,数据只能存在于事务的生命周期中。不管是会话级还是事务级的临时表,当会话结束后,临时表会消失,这和Oracle数据库不同。Oracle数据库当会话......
  • sparkSQL
    ApacheSparkSQL是ApacheSpark生态系统的一部分,用于处理结构化数据的模块。它提供了一种高级的数据处理接口,使用户能够使用SQL查询语言和DataFrameAPI来查询和操作结构化数据。下面是一些关于SparkSQL的关键概念和功能:1.DataFrame:SparkSQL的核心数据结构是DataFrame,它......
  • MYSQL - IF 语句
    背景:求三个字段的和但是其中一个字段有可能是null,相加后结果就是nullselectsum(a+b+c)fromtab;预期:如果sum(a+b+c)为null就不参与运算ifnull:https://blog.csdn.net/weixin_45659364/article/details/115468039......
  • MySQL的锁实现
    数据库锁机制 一.数据库锁的类型和细度   (一)类型     1. 共享锁:读锁,不同事务可以同是读取加共享锁的数据,但是不能同时加写锁和写操作  forshare     2.排他锁:写锁,不同事务,不可以同时读取加锁的资源进行写入  forupdate   (二)细度......
  • SSIS抽取intersystems cache 数据库数据,SQLSERVER数据库配置CACHE数据库DBLINK
       最近有个新需求,需要用SSIS抽取intersystemscache数据库表数据步骤一:首先想到的是通过ODBC驱动进行连接,第一步安装cache驱动步骤二:配置cache数据库连接串,关键内容:CACHe数据库地址,端口,空间名,用户名,密码步骤三:测试ODBC链接步骤四:SSIS中配置ODBC链接 步骤五:常规数......
  • SQL Server Management Studio 2019中更改为深色主题的方法
    1、找到安装目录的配置文件,并修改找到ssms.pkgundef 找到 //RemoveDarktheme  2、重新打开工具进行颜色主题设置工具——选项——环境——常规——颜色主题(深色)——确定 3、效果 完美。......
  • Spring Boot与MySQL搭配,打造极简高效的数据管理系统
    ......
  • MySQL运维2-主从复制
    一、主从复制概念主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从服务器中,然后在从服务器上对这些日志重新执行也叫重做,从而使得从数据库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行赋值,从库同时也可以作为其他从服务器的主库,实现链式复制。......