Spring Boot - Spring Boot 集成 MyBatis 分頁實現 PageHelper

一、PageHelper 概述

  • PageHelper 是一個優秀的 MyBatis 分頁插件,可以方便地在 Spring Boot 項目中使用 MyBatis 結合 PageHelper 實現分頁功能

二、PageHelper 引入

1、依賴引入
  • pom.xml
<properties>...<postgresql.verison>42.5.6</postgresql.verison><mybatis.version>3.0.1</mybatis.version><pagehelper.version>1.4.3</pagehelper.version>
</properties>
<dependencies>...<!-- postgresql 驅動 --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>${postgresql.verison}</version></dependency><!-- mybatis 和 springboot 整合的起步依賴 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><!-- 分頁插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper.version}</version></dependency>
</dependencies>
2、配置文件
  1. application.yml
mybatis:mapper-locations: classpath:/mapper/*.xml # 映射文件路徑config-location: classpath:/mybatis-config.xml # 核心配置文件路徑
  1. mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 設置駝峰標識 --><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 打印 SQL 語句 --><setting name="logImpl" value="STDOUT_LOGGING"/></settings><plugins><!-- 分頁插件 --><plugin interceptor="com.github.pagehelper.PageInterceptor"/></plugins>
</configuration>
3、準備數據
  1. 創建數據表
CREATE TABLE staff (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL,role VARCHAR(255),salary DECIMAL(10, 2)
);
  1. 插入數據
INSERT INTO staff (name, role, salary) VALUES
('張三', '項目經理', 25000.00),
('李四', '高級開發工程師', 18000.00),
('王五', '開發工程師', 15000.00),
('趙六', '測試工程師', 12000.00),
('錢七', 'UI設計師', 13000.00),
('孫八', '產品經理', 20000.00),
('周九', '運維工程師', 14000.00),
('吳十', '初級開發工程師', 10000.00),
('鄭十一', '數據庫管理員', 16000.00),
('王十二', '技術總監', 30000.00);

三、PageHelper 初識

1、基本介紹
  • startPage 方法用于設置分頁參數,緊跟的第一個查詢方法會被分頁
static <E> Page<E> startPage(int pageNum, int pageSize)
參數說明
pageNum當前頁碼
pageSize每頁條數
2、具體實現
(1)Entity
  • Staff.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Staff {private Integer id;private String name;private String role;private Double salary;
}
(2)Mapper
  1. StaffMapper.java
@Mapper
public interface StaffMapper {List<Staff> queryAll();
}
  1. StaffMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.my.mapper.StaffMapper"><resultMap id="staffResultMap" type="com.my.model.db.Staff"><id column="id" property="id"/><result column="name" property="name"/><result column="role" property="role"/><result column="salary" property="salary"/></resultMap><select id="queryAll" resultMap="staffResultMap">SELECT *FROM staff</select>
</mapper>
(3)Test
// 設置分頁參數
PageHelper.startPage(1, 5);// 緊跟的第一個查詢方法會被分頁
List<Staff> staffs = staffMapper.queryAll();for (Staff staff : staffs) {System.out.println(staff);
}
# 輸出結果Staff(id=3, name=張三, role=項目經理, salary=25000.0)
Staff(id=4, name=李四, role=高級開發工程師, salary=18000.0)
Staff(id=5, name=王五, role=開發工程師, salary=15000.0)
Staff(id=6, name=趙六, role=測試工程師, salary=12000.0)
Staff(id=7, name=錢七, role=UI設計師, salary=13000.0)

四、PageInfo 分頁信息

1、基本介紹
  1. PageHelper 提供了 PageInfo 類,用于封裝分頁信息

  2. 分頁信息包括當前頁碼、每頁條數、總頁數、總記錄數、是否為第一頁、是否為最后一頁等

2、演示
// 設置分頁參數
PageHelper.startPage(1, 5);// 緊跟的第一個查詢方法會被分頁
List<Staff> staffs = staffMapper.queryAll();// 包裝分頁信息
PageInfo<Staff> pageInfo = new PageInfo<>(staffs);for (Staff staff : staffs) {System.out.println(staff);
}int pageNum = pageInfo.getPageNum();
int pageSize = pageInfo.getPageSize();
int pageTotal = pageInfo.getPages();
long total = pageInfo.getTotal();
boolean isFirstPage = pageInfo.isIsFirstPage();
boolean isLastPage = pageInfo.isIsLastPage();System.out.println("pageNum: " + pageNum);
System.out.println("pageSize: " + pageSize);
System.out.println("pageTotal: " + pageTotal);
System.out.println("total: " + total);
System.out.println("isFirstPage: " + isFirstPage);
System.out.println("isLastPage: " + isLastPage);
# 輸出結果Staff(id=3, name=張三, role=項目經理, salary=25000.0)
Staff(id=4, name=李四, role=高級開發工程師, salary=18000.0)
Staff(id=5, name=王五, role=開發工程師, salary=15000.0)
Staff(id=6, name=趙六, role=測試工程師, salary=12000.0)
Staff(id=7, name=錢七, role=UI設計師, salary=13000.0)
pageNum: 1
pageSize: 5
pageTotal: 2
total: 10
isFirstPage: true
isLastPage: false

五、Page 類

1、基本介紹
  1. 可以使用 Page 類來接收結果

  2. Page 對象本身就包含了分頁信息,不需要額外包裝成 PageInfo 對象

2、演示
(1)Mapper
  1. StaffMapper.java
Page<Staff> queryAll2();
  1. StaffMapper.xml
<select id="queryAll2" resultMap="staffResultMap">SELECT *FROM staff
</select>
(2)Test
PageHelper.startPage(1, 5);Page<Staff> page = staffMapper.queryAll2();for (Staff staff : page) {System.out.println(staff);
}int pageNum = page.getPageNum();
int pageSize = page.getPageSize();
int pageTotal = page.getPages();
long total = page.getTotal();System.out.println("pageNum: " + pageNum);
System.out.println("pageSize: " + pageSize);
System.out.println("pageTotal: " + pageTotal);
System.out.println("total: " + total);
# 輸出結果Staff(id=3, name=張三, role=項目經理, salary=25000.0)
Staff(id=4, name=李四, role=高級開發工程師, salary=18000.0)
Staff(id=5, name=王五, role=開發工程師, salary=15000.0)
Staff(id=6, name=趙六, role=測試工程師, salary=12000.0)
Staff(id=7, name=錢七, role=UI設計師, salary=13000.0)
pageNum: 1
pageSize: 5
pageTotal: 2
total: 10

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

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

相關文章

jenkins自動化部署前端vue+docker項目

文章目錄一、準備工作二、編寫dockerfile文件三、新建jenkins任務一、準備工作 默認你的服務器centos已經搭建完成&#xff0c;同時已經安裝了jenkins和docker。 接下來去下載開源項目ruoyi并上傳到自己的gitee中。 二、編寫dockerfile文件 打開項目工程&#xff0c;在rouy…

opencv中contours的使用

一 Contour FindingContours使用 STL-style vector<> 表示&#xff0c;如 vector<cv::Point>, vector<cv::Point2f>。opencv中&#xff0c;使用函數 cv::findContours() 尋找contours&#xff0c; 具體函數定義如下&#xff1a;void cv::findContours(cv::In…

網絡安全初級

1、docker并配置代理 &#xff08;1&#xff09;在Ubuntu中安裝docker apt-get install docker.io docker-compose &#xff08;2&#xff09;安裝完成后&#xff0c;進入/etc/systemd/system/docker.service.d/http-proxy.conf配置文件下進行代理的配置&#xff0c;配置如圖…

JetBrains IDE 性能優化指南:idea.vmoptions 核心參數解析與配置建議

文章目錄深入解析 JetBrains IDE 的 VM 選項&#xff1a;idea.vmoptions 參數詳解一、內存與垃圾回收配置二、診斷與錯誤處理三、運行時優化參數四、模塊系統與反射控制五、特殊參數說明六、配置建議指南深入解析 JetBrains IDE 的 VM 選項&#xff1a;idea.vmoptions 參數詳解…

Datawhale AI夏令營 《基于帶貨視頻評論的用戶洞察挑戰賽》Part .1.

1. 賽題 參賽者需要構建端到端的評論分析系統&#xff0c;完成三大核心任務&#xff1a; 商品識別 輸入&#xff1a;視頻描述文本(video_desc)和標簽(video_tags)輸出&#xff1a;精準識別推廣商品名稱(Xfaiyx Smart Translator/Recorder) 多維情感分析 維度&#xff1a;情感傾…

【博文匯項目全維度測試報告:功能與自動化雙軌驗證】

&#x1f308;個人主頁: Aileen_0v0 &#x1f525;熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?&#x1f4ab;個人格言:“沒有羅馬,那就自己創造羅馬~” 文章目錄 項目背景:項目背景與意義&#xff1a;項目概述已實現的主要功能包括&#xff1a;當前系統存在的不足…

Java陷阱之assert關鍵字詳解

Assert.isTrue()方法用于斷言條件是否為真&#xff0c;如果條件不滿足&#xff08;即為false&#xff09;&#xff0c;則會拋出IllegalArgumentException&#xff0c;并附帶預設的錯誤信息。在示例中&#xff0c;當1.23不小于2.23時&#xff0c;方法拋出了異常&#xff0c;顯示…

mysql 散記:innodb引擎和memory引擎對比 sql語句少用函數 事務與長事務

文章目錄innodb引擎和memory引擎對比對比sql 語句&#xff1a;盡可能不使用函數條件隱式轉換隱式類型轉換隱式字符編碼轉換補充問題事務與長事務ACIDread viewMVCC 一致性視圖當前讀view 虛擬表長事務的影響與排查影響排查方法預防innodb引擎和memory引擎對比 innodb引擎是索引…

APK安裝器(安卓端)一鍵解除VX限制!輕松安裝各種手機應用

VX為了防止惡意軟件通過平臺傳播&#xff0c;保障用戶設備安全&#xff0c;會把通過VX發送的 APK 文件自動改成 “apk.1” 格式&#xff0c;這樣就能減少惡意軟件傳播的風險。我平時推薦安卓軟件的時候&#xff0c;有朋友反饋說&#xff0c;文件發到VX里就變成 “apk.1” 了&am…

Debian:從GNOME切換到Xfce

最近為20年前的T43重新安裝了Debian系統&#xff0c;但使用的gnome桌面太卡了。于是換成輕量級的Xfce系統。 1.安裝Xfce sudo apt update sudo apt install xfce4 xfce4-goodies命令中xfce4 是Xfce桌面環境的核心組件&#xff0c;xfce4-goodies 是一些額外的工具和插件&#xf…

徐州服務器租用:BGP線路的特點有哪些?

BGP的中文全稱為邊界網關協議&#xff0c;是指一種運行在傳輸控制協議上的自治系統路由協議&#xff0c;主要的功能就是可以實時控制路由的傳播&#xff0c;同時能夠幫助用戶選擇更合適的路由線路&#xff0c;保證網絡能夠穩定的運行&#xff0c;不會輕易出現網絡卡頓或故障的狀…

Java使用OSHI獲取服務器信息

OSHI可以獲取系統信息&#xff08;CPU、內存、磁盤、網絡等&#xff09;&#xff0c;純Java實現&#xff08;通過JNA訪問本地API&#xff0c;無需安裝本地庫&#xff09;&#xff0c;跨平臺支持。引入依賴<dependency><groupId>com.github.oshi</groupId><…

企業數字化資產管理安全、成本、協作困局難解?

在數字化浪潮席卷全球的今天&#xff0c;3D技術已成為驅動影視動畫、工業設計、建筑可視化等領域創新的核心動力。然而&#xff0c;隨著3D資產規模呈指數級增長&#xff0c;企業正面臨前所未有的管理挑戰&#xff1a;海量模型存儲混亂、版本迭代難以追溯、團隊協作效率低下、知…

力扣面試150題--組合總和

Day 72 題目描述&#xff08;終于理順回溯了&#xff09;思路 這里還是基于模板來說明代碼思路void backtracking(參數) {if (終止條件) {存放結果;return;}for (選擇 : 本層集合中的元素) {處理節點;backtracking(路徑, 選擇列表); // 遞歸撤銷處理; // 回溯} }對于主要函數的…

多客戶端-服務器(select,poll)

多客戶端-服務器結構總結一、普通CS架構的局限性核心問題&#xff1a;單線程中accept&#xff08;阻塞等待連接&#xff09;與read&#xff08;阻塞讀取數據&#xff09;函數互相干擾&#xff0c;無法同時處理多客戶端。本質原因&#xff1a;阻塞型函數需獨立執行&#xff0c;若…

如何使用postman做接口測試?

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 常用的接口測試工具主要有以下幾種&#xff1a;Postman: 簡單方便的接口調試工具&#xff0c;便于分享和協作。具有接口調試&#xff0c;接口集管理&#xff0c…

新型網絡架構設計助力智慧醫療降本增效

隨著智慧醫療的快速發展,越來越多的醫院開始布局“互聯網+醫療”服務,通過數字化手段提升醫療服務效率。然而,如何構建一個既穩定可靠又具備靈活擴展能力的醫療網絡,成為醫院數字化轉型中的關鍵問題。本文以某智慧醫療項目為例,探討傳統網絡與SD-WAN結合的最佳實踐。 背景…

一文讀懂現代卷積神經網絡—使用塊的網絡(VGG)

目錄 什么是使用塊的網絡&#xff08;VGG&#xff09;&#xff1f; 一、VGG 的核心思想&#xff1a;用塊&#xff08;Block&#xff09;構建網絡 二、VGG 的網絡結構 三、VGG 的優勢 1. 結構簡潔統一 2. 強大的特征表達能力 3. 小卷積核的計算效率 4. 良好的遷移學習性…

Linux的相關學習

linux 1.文件權限怎么修改 chmod [權限模式] [文件或目錄]1、**數字模式&#xff08;八進制&#xff09;**&#xff1a; chmod 755 myfile.sh # 所有者&#xff1a;rwx (7)&#xff0c;組&#xff1a;r-x (5)&#xff0c;其他用戶&#xff1a;r-x (5) 7 rwx&#xff08;讀寫…

Kotlin集合接口

Kotlin 集合概述 Kotlin 集合提供了對數據進行各種操作的便捷方式。它們實現了接口&#xff0c;因此可以操作不同類型的數據。例如&#xff0c;你可以編寫一個函數&#xff0c;同時打印 Set 和 List 的所有元素。我們來看看這是如何實現的。Iterable 接口 我們已經知道&#xf…