sky-take-out項目Mybatis的使用

分頁查詢

    public PageResult pageQuery(CategoryPageQueryDTO categoryPageQueryDTO) {PageHelper.startPage(categoryPageQueryDTO.getPage(),categoryPageQueryDTO.getPageSize());//下一條sql進行分頁,自動加入limit關鍵字分頁Page<Category> page = categoryMapper.pageQuery(categoryPageQueryDTO);return new PageResult(page.getTotal(), page.getResult());}

這段 Java 代碼是一個典型的 分頁查詢方法,使用了 PageHelper(MyBatis 的分頁插件)和 MyBatis 的 Mapper 接口 來實現分頁查詢功能。


🧩 一、代碼逐行解析

public PageResult pageQuery(CategoryPageQueryDTO categoryPageQueryDTO) {
  • 定義一個名為 pageQuery 的方法,接收一個 CategoryPageQueryDTO 類型的參數,返回值為 PageResult
  • CategoryPageQueryDTO 是封裝分頁查詢參數的 數據傳輸對象(DTO)
  • PageResult 是一個封裝了分頁結果(總記錄數和當前頁數據)的響應對象。

PageHelper.startPage(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());
  • 這是 PageHelper 提供的靜態方法,用于開啟分頁功能。
  • 它會攔截下一條 SQL 查詢,并自動為其加上分頁語句(如 LIMIT offset, pageSize)。
  • 參數說明:
    • getPage():當前頁碼(如第1頁、第2頁)
    • getPageSize():每頁顯示的記錄數

?? 注意:PageHelper.startPage() 只對緊隨其后的第一條查詢語句生效,所以一定要確保它在執行查詢前調用。


Page<Category> page = categoryMapper.pageQuery(categoryPageQueryDTO);
  • 調用 categoryMapperpageQuery 方法執行數據庫查詢。
  • 返回值類型是 Page<Category>,這是 PageHelper 提供的一個分頁對象,內部封裝了:
    • 當前頁的數據(List<Category>
    • 總記錄數(total
    • 當前頁碼、每頁大小等信息(PageHelper 內部使用)

return new PageResult(page.getTotal(), page.getResult());
  • 構造一個 PageResult 對象返回給前端:
    • page.getTotal():總記錄數
    • page.getResult():當前頁的數據列表(List<Category>

🧾 二、涉及類說明

1. PageHelper.startPage(...)(MyBatis 分頁插件)
  • 來自:com.github.pagehelper.PageHelper
  • 功能:開啟分頁,自動為下一條 SQL 添加分頁邏輯。
  • 依賴:需要在項目中引入 pagehelper-spring-boot-starter 或手動配置插件。
2. Page<T>(MyBatis 分頁結果對象)
  • 來自:com.github.pagehelper.Page
  • 是一個 List<T> 的子類,額外封裝了分頁信息,如:
    • long getTotal():總記錄數
    • int getPageNum():當前頁碼
    • int getPageSize():每頁大小
3. CategoryPageQueryDTO
  • 是一個自定義的 查詢參數封裝類,通常包含如下字段:
      @Datapublic class CategoryPageQueryDTO implements Serializable {//頁碼private int page;//每頁記錄數private int pageSize;//分類名稱private String name;//分類類型 1菜品分類  2套餐分類private Integer type;}
    
4. PageResult
  • 是一個通用的分頁結果封裝類,通常用于返回給前端,結構如下:
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class PageResult {private long total;         // 總記錄數private List<?> records;    // 當前頁數據
    }
    

📌 三、MyBatis Mapper 接口示例

public interface CategoryMapper {Page<Category> pageQuery(CategoryPageQueryDTO categoryPageQueryDTO);
}

對應的 XML SQL 示例:

    <!--    分頁查詢--><select id="pageQuery" resultType="com.sky.entity.Category">select * from category<where><if test="name != null and name != ''">and name like concat('%',#{name},'%')</if><if test="type != null">and type = #{type}</if></where>order by sort asc , create_time desc</select>

? 四、總結流程圖

1. 接口接收分頁參數 (Page, PageSize)↓
2. 調用 PageHelper.startPage(page, pageSize)↓
3. 執行 categoryMapper.pageQuery(dto) 查詢↓
4. MyBatis + PageHelper 自動添加 LIMIT 分頁語句↓
5. 查詢結果返回 Page<Category> 對象↓
6. 構造 PageResult 返回給前端

? 五、注意事項

  1. PageHelper 僅對下一條 SQL 生效

    • 如果中間有其他 SQL 被執行,分頁可能失效。
    • 例如:在 startPage() 后又執行了 select count(*),再執行主查詢,可能導致分頁失效。
  2. 不要在循環中使用 PageHelper

    • 可能導致分頁混亂。
  3. PageHelper 與 MyBatis Plus 的 Page 對象不同

    • MyBatis Plus 使用 IPage,PageHelper 使用 Page,注意不要混淆。

? 六、推薦優化:使用 PageResult 封裝更豐富的信息

public class PageResult {private long total;private int pageNum;private int pageSize;private int totalPages;private List<?> records;public PageResult(long total, List<?> records, int pageNum, int pageSize) {this.total = total;this.records = records;this.pageNum = pageNum;this.pageSize = pageSize;this.totalPages = (int) Math.ceil((double) total / pageSize);}// Getter / Setter
}

這樣前端可以拿到:

  • 總頁數
  • 當前頁
  • 每頁數量
  • 數據列表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89533.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

H3CNE小小綜合實驗

實驗拓撲圖實驗需求 按照圖示配置IP地址在SW1和SW2之間配置鏈路聚合增加鏈路帶寬&#xff0c;提高可靠性PC5和PC6屬于VLAN10&#xff0c; PC7和PC8屬于VLAN20SW1和SW2屬于二層交換機&#xff0c;SW3為三層交換機&#xff08;VLAN100用于對接R4&#xff09;,在交換機之間相連的鏈…

IP協議深入理解

一、什么是ip協議?1.1、ip協議是網絡層協議&#xff0c;ip協議的本質工作是提供一種能力&#xff0c;把數據可靠的跨網絡從主機A送到主機B&#xff1b;1.2、什么是ip&#xff1f;ip目標網絡目標主機&#xff1b;畫圖圖解:如圖&#xff0c;當主機A想要把數據發給主機B時&#x…

接收表單數據:serialize()函數解析

一、form-serialize作用與引入 作用&#xff1a; form-serialize可以快速收集表單數據&#xff0c;按照使用者意愿轉化為對象或字符串輸出&#xff0c;以便于提交至服務器。 引入&#xff1a; form-serialize不是瀏覽器自帶的JS方法&#xff0c;而是第三方工具庫。可以直接通過…

vc配置使用預編譯

預編譯原理 stdafx.h中加入系統文件&#xff0c;減少cpp中對這些文件的解析&#xff0c;提高速度 stdafx.h 會把編譯的文件生成pch&#xff0c;后續解析頭文件直接調用pch里面的數據 配置 新建stdafx.h和stdafx.cpp文件 配置stdafx.cpp文件為/Yc 創建預編譯文件整個項目設置/Yc…

反射機制的登錄系統

一、實體層&#xff08;po層&#xff09; //UserInfo package com.hugeyurt.po;import java.sql.ResultSet; import java.sql.SQLException;public class UserInfo {private String userID;private String name;private int count;private Long errorTime;private String pwd;p…

裝飾器模式及優化

裝飾器模式&#xff08;Decorator Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許向一個現有的對象添加新的功能&#xff0c;同時又不改變其結構。這種模式創建了一個裝飾器類&#xff0c;用來包裝原有的類&#xff0c;并在保持類方法簽名完整性的前提下&#xff…

共指消解技術全解析:從語言學規則到深度學習(附論文精讀)

精讀威斯康星大學綜述《Coreference Resolution: A Survey》&#xff0c;揭秘NLP中"實體鏈接"的核心技術一、什么是共指消解&#xff1f;為什么它是NLP的基石&#xff1f;共指消解(Coreference Resolution) 旨在識別文本中指向同一實體的不同表述。例如&#xff1a;t…

git配置git commit -m “fix 11,22: 修改bugid為11,22“

文章目錄前言一、報錯提示二、實現1.commitlint.config.js規范配置2. **修改正則表達式**&#xff1a;3. **移除 scope-case 規則**&#xff1a;4. **增強自定義規則邏輯**&#xff1a;測試結果&#xff1a;正則表達式詳解&#xff1a;前言 提示&#xff1a;正常的配置git規范…

nastools繼任者?極空間部署影視自動化訂閱系統『MediaMaster』

nastools繼任者&#xff1f;極空間部署影視自動化訂閱系統『MediaMaster』 哈嘍小伙伴們好&#xff0c;我是Stark-C~ 對于我們NAS玩家來說&#xff0c;觀影總是大家繞不開的一個執念&#xff0c;并且為觀影的折騰大家也都是樂此不疲~ 曾經有一個非常絕絕子的觀影神器擺在我們…

題解:CF1690G Count the Trains

思路&#xff1a; 首先我們可以理清一下各種情況&#xff1a;1&#xff09;m可能為02&#xff09;一次操作時&#xff0c;只需要考慮每節火車的車頭。3&#xff09;當一節火車的速度降低時&#xff0c;只會影響它及它后面的車廂當m0時&#xff0c;我們可以記錄上一節車頭的速度…

CCF編程能力等級認證GESP—C++3級—20250628

CCF編程能力等級認證GESP—C3級—20250628單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09;判斷題&#xff08;每題 2 分&#xff0c;共 20 分&#xff09;編程題 (每題 25 分&#xff0c;共 50 分)奇偶校驗分糖果單選題&#xff08;每題 2 分&#xff0c;共 30 分…

2G和3G網絡關閉/退網狀態(截止2025年7月)

從能打語音電話的2G&#xff0c;到能發彩信、聊QQ的3G&#xff0c;這兩項陪伴了我們數十年的通信技術&#xff0c;正在悄然退出歷史舞臺。近日&#xff0c;全球移動供應商協會&#xff08;GSA&#xff09;發布的《2025年7月2G和3G網絡關閉報告》顯示&#xff0c;全球已有超百個…

Day06_C語言網絡編程20250718mobus重點

01.思維導圖1 什么是 modbus他是一個在工控領域非常好用的通信寫 modbus協議本質上是一個 基于 tcp 協議二次封裝的一個協議 什么叫做基于tcp二次封裝的協議&#xff1a;我們自己寫的pack_t(無論靜態還是動態)&#xff0c;都是屬于二次封裝的協議modbus協議是一種 “主從問答式…

比亞迪古德伍德亮相:從技術突破到文化對話

近日&#xff0c;比亞迪攜騰勢Z9GT、方程豹豹5、騰勢D9亮相英國古德伍德速度節——全球最具聲望的汽車文化盛典。方程豹豹5搭載全球首個 DMO電驅越野平臺&#xff0c;在爬山賽道上展現出媲美性能跑車的動力響應與精準控制&#xff0c;徹底打破“越野必靠大排量燃油機”的西方傳…

UniApp TabBar 用戶頭像方案:繞過原生限制的實踐

需求場景&#xff1a; 在 UniApp 項目中&#xff0c;需要將 TabBar 首頁項 (index) 的圖標替換為當前用戶的網絡圖片&#xff0c;并實現&#xff1a; 放大且圓形顯示。點擊該圖標時&#xff0c;頁面滾動回頂部。切換到其他分類時&#xff0c;首頁 Tab 項恢復為普通首頁圖標。 嘗…

如何閱讀Spring源碼

如何閱讀Spring源碼 簡介 最近有許多人問我如何閱讀Spring源碼&#xff0c;那我便在這給出閱讀源碼的方法&#xff0c;能夠保證本地能夠讓源碼能夠運行起來。 Spring 源碼環境本地編譯 Gradle下載地址 通過網盤分享的文件&#xff1a;gradle-6.4.1-all.zip 鏈接: https://pan.b…

Excel導出實戰:從入門到精通 - 構建專業級數據報表的完整指南

文章目錄Excel導出實戰&#xff1a;從入門到精通 - 構建專業級數據報表的完整指南引言&#xff1a;ExcelJSFileSaver如何映射到Excel操作一、ExcelJS核心架構解析 - 從文件結構理解1. 工作簿(Workbook)模型 - 相當于整個Excel文件2. 工作表(Worksheet)配置 - 相當于單個工作表設…

PyTorch圖像預處理全解析(transforms)

1. 引言在深度學習計算機視覺任務中&#xff0c;數據預處理和數據增強是模型訓練的關鍵步驟&#xff0c;直接影響模型的泛化能力和最終性能表現。PyTorch 提供的 torchvision.transforms 模塊&#xff0c;封裝了豐富的圖像變換方法&#xff0c;能夠高效地完成圖像標準化、裁剪、…

slam中的eskf觀測矩陣推導

在之前的《slam中的eskf推導》一文中&#xff0c;沒有寫觀測矩陣 H 矩陣的過程&#xff0c;現在補上這部分。前置列舉幾個等下推導需要用到的一些點&#xff1a;平面特征點構造觀測矩陣例如在 fastlio 中&#xff0c;是利用平面特征點到擬合平面的距離來構造觀測方程&#xff0…

Python_2

邏輯判斷 首先得首先&#xff0c;我們想判斷一個邏輯的正確與否&#xff0c;一定是需要一個能夠表現出邏輯的詞 如果我只說一個1 2&#xff0c;那么大家都不知道我在說什么但是如果我說1<2,那么大家就能判斷這個語句的正確與否了 下面是幾個常用的邏輯詞 < 小于>大于&…