【第29章】MyBatis-Plus之分頁插件

文章目錄

  • 前言
  • 一、支持的數據庫
  • 二、配置方法
  • 三、屬性介紹
  • 四、自定義 Mapper 方法中使用分頁
  • 五、其他注意事項
  • 六、Page 類
  • 七、實戰
    • 1. 配置類
    • 2. 分頁類
    • 3. 測試
  • 總結


前言

MyBatis-Plus 的分頁插件 PaginationInnerInterceptor 提供了強大的分頁功能,支持多種數據庫,使得分頁查詢變得簡單高效。


一、支持的數據庫

PaginationInnerInterceptor 支持廣泛的數據庫,包括但不限于:
在這里插入圖片描述
如果你需要支持的數據庫不在列表中,可以通過 Pull Request 請求添加。
覆蓋范圍很廣,已經支持了眾多國產數據庫。

二、配置方法

在 Spring Boot 項目中,你可以通過 Java 配置來添加分頁插件:

@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {/*** 添加分頁插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多個插件, 切記分頁最后添加// 如果有多數據源可以不配具體類型, 否則都建議配上具體的 DbTypereturn interceptor;}
}

三、屬性介紹

PaginationInnerInterceptor 提供了以下屬性來定制分頁行為:

屬性名類型默認值描述
overflowbooleanfalse溢出總頁數后是否進行處理
maxLimitLong單頁分頁條數限制
dbTypeDbType數據庫類型
dialectIDialect方言實現類

建議單一數據庫類型的均設置 dbType

四、自定義 Mapper 方法中使用分頁

你可以通過以下方式在 Mapper 方法中使用分頁:

IPage<UserVo> selectPageVo(IPage<?> page, Integer state);
// 或者自定義分頁類
MyPage selectPageVo(MyPage page);
// 或者返回 List
List<UserVo> selectPageVo(IPage<UserVo> page, Integer state);

對應的 XML 配置:

<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo">SELECT id,name FROM user WHERE state=#{state}
</select>

如果返回類型是 IPage,則入參的 IPage 不能為 null。如果想臨時不分頁,可以在初始化 IPage 時 size 參數傳入小于 0 的值。 如果返回類型是 List,則入參的 IPage 可以為 null,但需要手動設置入參的 IPage.setRecords(返回的 List)。 如果 XML 需要從 page 里取值,需要使用 page.屬性 獲取。

五、其他注意事項

  • 生成 countSql 時,如果 left join 的表不參與 where 條件,會將其優化掉。建議在任何帶有 left join 的 SQL 中,都給表和字段加上別名。
  • 在使用多個插件時,請將分頁插件放到插件執行鏈的最后面,以避免 COUNT SQL 執行不準確的問題。

六、Page 類

Page 類繼承了 IPage 類,實現了簡單分頁模型。如果你需要實現自己的分頁模型,可以繼承 Page 類或實現 IPage 類。

屬性名類型默認值描述
recordsListemptyList查詢數據列表
totalLong0查詢列表總記錄數
sizeLong10每頁顯示條數,默認 10
currentLong1當前頁
ordersListemptyList排序字段信息
optimizeCountSqlbooleantrue自動優化 COUNT SQL
optimizeJoinOfCountSqlbooleantrue自動優化 COUNT SQL 是否把 join 查詢部分移除
searchCountbooleantrue是否進行 count 查詢
maxLimitLong單頁分頁條數限制
countIdStringXML 自定義 count 查詢的 statementId

七、實戰

1. 配置類

package org.example.springboot3.mybatisplus.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Create by zjg on 2024/7/7*/
@Configuration
public class MybatisPlusConfig {/*** 添加分頁插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多個插件, 切記分頁最后添加// 如果有多數據源可以不配具體類型, 否則都建議配上具體的 DbTypereturn interceptor;}
}

2. 分頁類

package org.example.springboot3.mybatisplus.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.springboot3.bigevent.entity.Result;
import org.example.springboot3.mybatisplus.model.User;
import org.example.springboot3.mybatisplus.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;/*** Create by zjg on 2024/7/7*/
@RestController
@RequestMapping("/page/")
public class PageController {@AutowiredUserService userService;@GetMappingResult<List<User>> page(@RequestParam Integer pageNum,@RequestParam Integer pageSize, String name) {// 假設有一個 QueryWrapper 對象,進行有條件的分頁查詢IPage<User> page = new Page<>(pageNum, pageSize);LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery(User.class);if(StringUtils.hasLength(name)){queryWrapper.eq(User::getName, name);}IPage<User> userPage = userService.page(page, queryWrapper); // 調用 page 方法List<User> userList = userPage.getRecords();long total = userPage.getTotal();System.out.println("Total users: " + total);return Result.success("請求成功",userList);}
}

3. 測試

在這里插入圖片描述

總結

回到頂部

通過這些配置和使用方法,你可以輕松地在 MyBatis-Plus 中實現分頁查詢,提高應用的性能和用戶體驗。
更多插件內容請訪問官網

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

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

相關文章

Windows電腦安裝Python結合內網穿透輕松搭建可公網訪問私有網盤

文章目錄 前言1.本地文件服務器搭建1.1.Python的安裝和設置1.2.cpolar的安裝和注冊 2.本地文件服務器的發布2.1.Cpolar云端設置2.2.Cpolar本地設置 3.公網訪問測試4.結語 前言 本文主要介紹如何在Windows系統電腦上使用python這樣的簡單程序語言&#xff0c;在自己的電腦上搭建…

kubernetes授予用戶指定命名空間的使用權限

kubernetes授予用戶指定命名空間的使用權限 問題描述具體實現簽發客戶端證書創建RBAC策略生成kubeconfig文件 問題描述 假如我們部門來了個新同事&#xff0c;他需要使用kubernetes集群&#xff0c;但是因為他剛來&#xff0c;還不熟悉&#xff0c;所以不能直接將kubernetes集…

Spring如何控制Bean加載+執行順序

1. Order 注解和 Ordered 接口 用途&#xff1a;控制組件執行順序或排序&#xff0c;但不控制Bean初始化順序。定義執行順序&#xff1a;通過整數值指定組件優先級&#xff0c;數值越小優先級越高。集合排序&#xff1a;影響自動裝配到集合中的組件排列順序。使用場景&#xf…

77.MySQL的分頁查詢

一、LIMIT關鍵字 LIMIT關鍵字用于限制返回結果集中的行數。其基本語法如下&#xff1a; SELECT * FROM 表名 LIMIT 行數; 例如&#xff0c;要從名為mark_info的表中選擇最新創建的10個工單的信息&#xff0c;可以執行以下查詢&#xff1a; SELECT * FROM mark_info ORDER B…

電力需求預測挑戰賽筆記 Taks1 跑通baseline

#AI夏令營 #Datawhale #夏令營 賽題 一句話介紹賽題任務可以這樣理解賽題&#xff1a; 【訓練時序預測模型助力電力需求預測】 電力需求的準確預測對于電網的穩定運行、能源的有效管理以及可再生能源的整合至關重要。 賽題任務 給定多個房屋對應電力消耗歷史 N 天的相關序列數…

拓撲排序(算法篇)

算法之拓撲排序 拓撲排序 概念&#xff1a; 拓撲排序是對有向無圈圖的頂點的一種排序。排序不必是唯一的&#xff0c;任何合理的排序都是可以的。具體做法是&#xff1a;先找出任意一個沒有入邊的頂點v(就是沒有其他頂點指向的頂點)&#xff0c;將頂點v放入隊列&#xff0c;…

element-plus el-table點擊當前行和劃過展示鼠標

在 Element Plus 的 el-table 組件中&#xff0c;設置滑過行時鼠標的樣式可以通過 CSS 來實現。你可以使用 CSS 的 cursor 屬性來定義鼠標懸停時的樣式。以下是一個簡單的例子&#xff1a; 首先&#xff0c;在你的 Vue 組件的 .el-table .el-table__row:hover {cursor: poin…

09.AOP-尚硅谷Spring零基礎入門到進階,一套搞定spring6全套視頻教程(源碼級講解)

現有代碼缺陷 針對帶日志功能的實現類&#xff0c;我們發現有如下缺陷&#xff1a; 對核心業務功能有干擾&#xff0c;導致程序員在開發核心業務功能時分散了精力附加功能分散在各個業務功能方法中&#xff0c;不利于統一維護 解決思路 解決核心&#xff1a;解耦。把附加功能從…

glm-4 聯網搜索 api 測試

今天測試了一下 glm-4 的聯網搜索 web_search tool 調用&#xff0c;發現了 web_search 的網頁檢索返回結果中幾個比較詭異的事情&#xff0c;特此記錄&#xff1a; 有些檢索結果沒有 icon、link、media 字段&#xff0c;但從內容上看確實是聯網搜索出來的結果&#xff0c;不知…

從零開始讀RocketMq源碼(三)Broker存儲Message流程解析

目錄 前言 準備 消息載體CommitLog 文件持久化位置 源碼解析 broker消息對象MessageExtBrokerInner 異步存儲message CommitLog的真相 創建MappedFile文件 加入異步刷盤隊列 Message異步存儲MappedByteBuffer 總結 前言 在面試中我們經常會聽到這樣的回答&#x…

國產化趨勢下源代碼數據防泄密的信創沙盒的方案分享

隨著國產化的大力推進&#xff0c;越來越多的企事業單位在逐步替換Windows、Linux等操作系統的使用。那么什是國產化了&#xff1f;國產化是指在產品或服務中采用國內自主研發的技術和標注&#xff0c;替代過去依賴的他國的產品和服務&#xff0c;國產化又被稱之為“信創”&…

GitLab CI/CD實現項目自動化部署

1 GitLab CI/CD介紹 GitLab CI/CD 是 GitLab 中集成的一套用于軟件開發的持續集成&#xff08;Continuous Integration&#xff09;、持續交付&#xff08;Continuous Delivery&#xff09;和持續部署&#xff08;Continuous Deployment&#xff09;工具。這套系統允許開發團隊…

vue里實現點擊按鈕回到頁面頂部功能,博客必備!

效果 步驟 1-標簽結構 動態綁定樣式style&#xff0c;監聽點擊事件&#xff0c;后續控制opacity透明度。和滾動距離 <div class"toTop" :style"dynamicStyles" click"toTop"><!--<i class"fa fa-arrow-up"></i>…

Django ORM中的F 對象

F 對象非常強大&#xff0c;可以在查詢和更新操作中進行復雜的字段間運算。 假設我們有一個包含商品信息的模型 Product&#xff1a; from django.db import modelsclass Product(models.Model):name models.CharField(max_length100)price models.DecimalField(max_digits…

MySQL向自增列插入0失敗問題

問題 在一次上線時&#xff0c;發現通過腳本添加的狀態表中&#xff0c;待提交的狀態不正確&#xff0c;本來應該是0&#xff0c;線上是101。 原因 默認情況下&#xff0c;MySQL對應自增列&#xff0c;認為0和null等價&#xff08;因為mysql認為0不是最佳實踐不推薦使用&…

超簡單的通配證書簽發工具,免費,無需安裝任何插件到本地

常見的acme.sh 或者 lego等工具需要配置&#xff0c;安裝不靈活&#xff0c;續簽需要配置計劃任務&#xff0c;簽發單域名證書或者通配證書需要不同的指令和配置&#xff0c;繁瑣&#xff0c;如果自己程序想要對接簽發證書的api有的不支持&#xff0c;有的用起來繁瑣。 最近發…

[手機Linux PostmarketOS]三, Alpine Linux命令使用

Alpine Linux 一些常用的指令&#xff1a; 添加國內源下載鏈接&#xff1a; 編譯以下文件&#xff0c;添加鏈接進去&#xff1a; sudo vi /etc/apk/repositories##清華源&#xff1a; https://mirror.tuna.tsinghua.edu.cn/alpine/latest-stable/main https://mirror.tuna.tsi…

【VIVADO SDK調試遇到DataAbortHandler】

問題 SDK調試遇到DataAbortHandler問題。 運行后不顯示結果&#xff0c;debug模式下發現進入DataAbortHandler異常函數。程序中存在大數組。 原因:SDK默認的堆棧為1024bytes,需要將堆棧調大。 修改方法&#xff1a; 解決:對application中src下的lscript.ld雙擊&#xff0c;…

android 添加一個水平線

在Android中&#xff0c;添加一個水平線通常可以通過幾種方式實現&#xff0c;最常見的是使用View組件或者自定義的Drawable。下面是一個簡單的例子&#xff0c;展示如何在布局文件中添加一個水平線&#xff1a; 使用View組件 在你的布局XML文件中&#xff0c;你可以添加一個…

Linux 程序卡死的特殊處理

一、前言 Linux環境。 我們在日常編寫的程序中&#xff0c;可能會出現一些細節問題&#xff0c;導致程序卡死&#xff0c;即程序沒法正常運行&#xff0c;界面卡住&#xff0c;也不會閃退... 當這種問題出現在客戶現場&#xff0c;那就是大問題了。。。 當我們暫時還無法排…