若依框架的startPage( )函數怎麼自動關聯查詢SQL語句?

来源:https://www.cnblogs.com/mysticbinary/archive/2023/09/28/17238886.html
-Advertisement-
Play Games

Question Description 使用JAVA語言的若依框架的時候,發現只要使用了startPage()函數, 並不需要前端傳遞分頁的數據,也不需要註解,就能完成分頁功能。預判他應該是使用類似攔截器的機制,但還是感覺很神奇,感覺知道個大概不過癮,還是要更細緻的瞭解才能滿足,就想研究一下並記錄 ...


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分頁


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現象 大量的分支選擇型代碼段看著讓人頭疼 for (Field field : declaredFields) { Class<?> type = field.getType(); String key = field.getName(); Element result = resultMap.ad ...
  • 文件目錄結構 tree . ├── bin ├── include │ └── calc.h ├── lib │ ├── add.c │ ├── div.c │ ├── mul.c │ └── sub.c └── src └── main.c 4 directories, 6 files 靜態庫生成 ...
  • 第一題 下列程式輸出啥? public class StringDemo{ private static final String MESSAGE="taobao"; public static void main(String [] args) { String a ="tao"+"bao"; S ...
  • 基本介紹 MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 MyBatis-Plus特性 無侵入:只做增強不做改變,引入它不會對 ...
  • 在Java中,Serializable是一個標記介面(marker interface),用於指示一個類的對象可以被序列化。序列化是將對象轉換為位元組流的過程,可以將對象保存到文件、在網路上傳輸或在記憶體中傳遞。 當一個類實現了Serializable介面時,它表示該類的對象可以被序列化和反序列化。 序 ...
  • 在Java 21中,引入了虛擬線程(Virtual Threads)來簡化和增強併發性,這使得在Java中編程併發程式更容易、更高效。 虛擬線程,也稱為“用戶模式線程(user-mode threads)”或“纖程(fibers)”。該功能旨在簡化併發編程並提供更好的可擴展性。虛擬線程是輕量級的,這 ...
  • 折線圖是一種用於可視化數據變化趨勢的圖表,它可以用於表示任何數值隨著時間或類別的變化。 折線圖由折線段和折線交點組成,折線段表示數值隨時間或類別的變化趨勢,折線交點表示數據的轉折點。 折線圖的方向表示數據的變化方向,即正變化還是負變化,折線的斜率表示數據的變化程度。 1. 主要元素 折線圖主要由以下 ...
  • 1、概述 GEBCO(General Bathymetric Chart of the Oceans)全球 DEM數據集(Geo-Engineering Digital Savage)是基於“全球地球系統計劃”(Global Earth System Project)的最新數據集。 GEBCO 數據 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...