若依框架的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语句?的更多相关文章
- 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划
1.问题 通过调用dbms_xplan包中DISPLAY_AWR函数(DBMS_XPLAN.DISPLAY_AWR)可以从AWR数据中查看到SQL语句的历史执行计划,但是,DISPLAY ...
- 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明
一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...
- Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public ...
- 在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)
原文:在论坛中出现的比较难的sql问题:19(row_number函数 行转列.sql语句记流水) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记 ...
- 使用Entity Framework 自动产生的Sql语句
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
- @InsertProvider 根据bean属性,自动生成插入sql语句
以Test为例,用mybatis的@InsertProvider的注解插入数据的时候,每次都要写类似于 Mapper类 @Mapper public interface TestDao { @Inse ...
- EF-记录程序自动生成并执行的sql语句日志
在EntityFramework的CodeFirst模式中,我们想将程序自动生成的sql语句和执行过程记录到日志中,方便以后查看和分析. 在EF的6.x版本中,在DbContext中有一个Databa ...
- python操作MySQL,SQL注入的问题,SQL语句补充,视图触发器存储过程,事务,流程控制,函数
python操作MySQL 使用过程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 由于能操作MySQL的模块是第三方模块,我们需要pip安装. pip3 insta ...
- SQL语句操作数据与一些函数使用的丰富数据库
数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...
- SQL 语句常用函数
一.字符转换函数 1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CH ...
随机推荐
- 现代C++学习指南-类型系统
在前一篇,我们提供了一个方向性的指南,但是学什么,怎么学却没有详细展开.本篇将在前文的基础上,着重介绍下怎样学习C++的类型系统. 写在前面 在进入类型系统之前,我们应该先达成一项共识--尽可能使用C ...
- Java正三角、倒三角
正三角 public static void main(String[] args) { // 正三角 int num = 8; for(int i = 1;i<=num;i++) { for( ...
- Dlang 并行化
Dlang 并行化 好难受,dlang 生态太差,没办法,学了半天才明白. 我尽量以精炼的语言解释. 采用 定义,例子(代码),解释 的步骤讲解. 所以你可能看到很多代码,一点解释-- 我会省略一些 ...
- SQL Server 根据一个表数据修改另外一个表数据
今天在写代码的时候发现一个有趣的问题,同时也暴露了之前写的代码有问题,还好之前没有出现重复的情况,及时发现了这个问题,及时改了回来,不然就GG了 下面先上代码,再给大家解说一下 CREATE TABL ...
- 使用部分写时复制提升Lakehouse的 ACID Upserts性能
使用部分写时复制提升Lakehouse的 ACID Upserts性能 译自:Fast Copy-On-Write within Apache Parquet for Data Lakehouse A ...
- Tomcat改jar
Tomcat改jar 插件修改 <!-- <plugin>--> <!-- <groupId>org.apache.maven.plugins</gro ...
- DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI/CD解决方案
目录 一.系统环境 二.前言 三.DevOps简介 四.CI/CD简介 五.安装并配置docker参数 六.使用registry搭建镜像仓库 七.安装部署gitlab代码仓库 7.1 创建gitlab ...
- AttributeError: 'EmailUse' object has no attribute 'SendMail'
错误原因:函数名与模块名重复 解决方案:不要将函数名与模块名重复
- Blazor前后端框架Known-V1.2.9
V1.2.9 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Gith ...
- centos打开防火墙的TCP80端口
用管理员权限运行iptables -I INPUT -p tcp --dport 80 -j ACCEPT