Java后端實現不用pagehelper。手寫分頁如何實現?

Java后端實現不用pagehelper。手寫分頁如何實現?

如果你不使用PageHelper這樣的分頁插件,你可以手動實現分頁邏輯。下面是一個使用Java后端手寫分頁的示例:

首先,確定每頁顯示的數據量和當前頁碼。

int pageSize = 10; // 每頁顯示的數據量
int currentPage = 1; // 當前頁碼

確定查詢總數據量的SQL語句。

String countSql = "SELECT COUNT(*) FROM your_table";

執行上述SQL語句,獲取總數據量。

// 執行countSql語句,返回結果集ResultSet
// 假設使用JDBC連接數據庫,可以使用Statement或者PreparedStatement執行查詢操作
ResultSet countResult = statement.executeQuery(countSql);int totalCount = 0;
if (countResult.next()) {totalCount = countResult.getInt(1); // 獲取第一列的數據作為總數據量
}
countResult.close();

根據總數據量和每頁顯示的數據量計算總頁數。

int totalPages = (int) Math.ceil((double) totalCount / pageSize);

根據當前頁碼和每頁顯示的數據量計算偏移量

String pageSql = "SELECT * FROM your_table LIMIT ?, ?";

執行分頁查詢,獲取當前頁的數據。

// 執行pageSql語句,設置偏移量和每頁數據量的參數
// 假設使用JDBC連接數據庫,可以使用PreparedStatement執行查詢操作
PreparedStatement pageStatement = connection.prepareStatement(pageSql);
pageStatement.setInt(1, offset);
pageStatement.setInt(2, pageSize);ResultSet pageResult = pageStatement.executeQuery();// 遍歷結果集,獲取分頁數據
while (pageResult.next()) {// 處理每一行數據
}pageResult.close();
pageStatement.close();

通過以上步驟,你就可以手動實現分頁功能了。需要注意的是,這只是一個簡單的示例,實際應用中可能需要處理更多的異常情況和參數校驗。同時,根據具體的數據庫類型和框架,代碼的具體實現方式可能會有所不同。

要是前端需要一個list。我如何使用Java分頁后給他返回?

假設你已經完成了手動分頁查詢的代碼,可以得到當前頁的數據。

List<YourDataModel> dataList = new ArrayList<>();// 執行分頁查詢,獲取當前頁的數據
while (pageResult.next()) {YourDataModel data = new YourDataModel();// 假設YourDataModel是你的數據模型類,可以根據需要設置相應的屬性值// 例如:data.setId(pageResult.getInt("id"));//       data.setName(pageResult.getString("name"));dataList.add(data);
}pageResult.close();
pageStatement.close();

將數據列表和分頁信息封裝成一個結果對象。

// 使用Jackson、Gson等庫將結果對象轉換成JSON字符串
String jsonResult = YourJsonConverter.convertToJson(result);

將JSON字符串作為響應返回給前端。

// 將JSON字符串作為響應返回給前端
response.getWriter().write(jsonResult);

上述示例中,我們使用了一個名為 PageResult 的類來封裝分頁結果,你可以根據自己需求自定義該類,并根據具體框架或庫的要求進行JSON轉換。

當前端接收到這個JSON字符串后,就可以解析其中的數據和分頁信息,進行展示和處理了。

要是我查詢沒有做分頁查詢,如何將全部結果分頁后返回?

完成查詢操作,獲取到所有的結果數據。

List<YourDataModel> dataList = new ArrayList<>();// 執行查詢操作,獲取所有的結果數據
while (resultSet.next()) {YourDataModel data = new YourDataModel();// 設置數據屬性dataList.add(data);
}resultSet.close();
statement.close();

根據前端需要的分頁信息(如每頁顯示的數據量和當前頁碼),進行分頁處理。

int pageSize = 10; // 每頁顯示的數據量
int currentPage = 1; // 當前頁碼int totalCount = dataList.size(); // 總數據量
int totalPages = (int) Math.ceil((double) totalCount / pageSize); // 總頁數int startIndex = (currentPage - 1) * pageSize; // 計算起始索引
int endIndex = currentPage * pageSize; // 計算結束索引if (endIndex > totalCount) {endIndex = totalCount; // 確保結束索引不超過總數據量
}List<YourDataModel> pageDataList = dataList.subList(startIndex, endIndex); // 獲取當前頁的數據

將分頁數據和分頁信息封裝成一個結果對象。

// 創建一個結果對象,包含數據列表和分頁信息
PageResult<YourDataModel> result = new PageResult<>();
result.setDataList(pageDataList); // 設置數據列表result.setCurrentPage(currentPage); // 設置當前頁碼
result.setPageSize(pageSize); // 設置每頁顯示的數據量
result.setTotalCount(totalCount); // 設置總數據量
result.setTotalPages(totalPages); // 設置總頁數

使用合適的方式將結果對象轉換為前端需要的格式,如JSON格式。

// 使用Jackson、Gson等庫將結果對象轉換成JSON字符串
String jsonResult = YourJsonConverter.convertToJson(result);

將JSON字符串作為響應返回給前端。

// 將JSON字符串作為響應返回給前端
response.getWriter().write(jsonResult);

請注意,上述示例中我們手動進行了分頁處理,實際應用中可能需要根據具體需求進行異常處理、參數校驗等。同時,根據具體的數據庫類型和框架,代碼的具體實現方式可能會有所不同。

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

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

相關文章

移動通信系統的LMS自適應波束成形技術matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 matlab2022a 3.部分核心程序 ..................................................................... idxx0; while idxx&…

Spring Bean的生命周期總結(包含面試題)

目錄 一、Bean的初始化過程 1. 加載Spring Bean 2. 解析Bean的定義 3. Bean屬性定義 4. BeanFactoryPostProcessor 擴展接口 5. 實例化Bean對象 6. Aware感知 7. 初始化方法 8. 后置處理 9. destroy 銷毀 二、Bean的單例與多例模式 2.1 單例模式&#xff08;Sin…

游戲不再只是娛樂,更成為了一種學習和成長的途徑

隨著科技的飛速發展和游戲設計的創新&#xff0c;當下的游戲行業正經歷著前所未有的繁榮時代。各種各樣的游戲類型在不斷涌現&#xff0c;為玩家們帶來了豐富多彩的娛樂體驗。這些火熱的游戲類型不僅改變了我們的娛樂方式&#xff0c;還在無形中影響了我們的生活。 多元游戲類…

2023河南萌新聯賽第(六)場:河南理工大學-F 愛睡大覺的小C

2023河南萌新聯賽第&#xff08;六&#xff09;場&#xff1a;河南理工大學-F 愛睡大覺的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目錄 2023河南萌新聯賽第&#xff08;六&#xff09;場&#xff1a;河南理工大學-F 愛睡大覺的小C題意解題思路 題意 新學期的概…

大數據平臺中元數據庫—MySQL的異常故障解決

本文的主要目標是解決大數據平臺中元數據庫MySQL的異常故障。通過分析應用響應緩慢的問題&#xff0c;找到了集群組件HIVE和元數據庫MySQL的原因。通過日志分析、工具檢測和專家指導等一系列方法&#xff0c; 最終確定問題的根源是大數據集群中租戶的不規范使用所導致&#xff…

[Unity]Lua本地時間、倒計時和正計時。

慣例&#xff0c;直接上代碼&#xff1a; --正計時開始時的時間戳 self.begin_time os.time() --倒計時時長&#xff0c;01:30:00 self.countdown_time 5400 --是否開始計時 self.is_update_local_time true--Unity Update function time_transition:update_local_timer()i…

Linux學習之iptables過濾規則的使用

cat /etc/redhat-release看到操作系統是CentOS Linux release 7.6.1810&#xff0c;uname -r看到內核版本是3.10.0-957.el7.x86_64&#xff0c;iptables --version可以看到iptables版本是v1.4.21。 iptables -t filter -A INPUT -s 10.0.0.8 -j ACCEPT會在最后一行插入。 10…

代碼隨想錄day52

300最長遞增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {int piles 0; // 牌堆數初始化為 0vector<int> top(nums.size()); // 牌堆數組 topfor (int i 0; i < nums.size(); i) {int poker nums[i]; int left 0, right…

04 qt功能類、對話框類和文件操作

一 QT中時間和日期 時間 ---- QTime日期 ---- QDate對于Qt而言,在實際的開發過程中, 1)開發者可能知道所要使用的類 ---- >幫助手冊 —>索引 -->直接輸入類名進行查找 2)開發者可能不知道所要使用的類,只知道開發需求文檔 ----> 幫助 手冊,按下圖操作: 1 …

Android 13像Settings一樣獲取SIM卡信息

一.背景 由于客戶定制的Settings里面需要獲取到SIM卡信息,所以需要實現此功能。 目錄 一.背景 二.前提條件 三.調用api 二.前提條件 首先應用肯定要是系統應用,并且導入framework.jar包,具體可以參考: Android 應用自動開啟輔助(無障礙)功能并使用輔助(無障礙)功能_…

python中的cnn:介紹和基本使用方法

python中的cnn&#xff1a;介紹和基本使用方法 卷積神經網絡&#xff08;Convolutional Neural Networks&#xff0c;簡稱CNN&#xff09;是一種在圖像識別、語音識別、自然語言處理等許多領域取得顯著成功的深度學習模型。CNN的設計靈感來源于生物的視覺系統&#xff0c;由多…

WordPress更換域名后-后臺無法進入,網站模版錯亂,css失效,網頁中圖片不顯示。完整解決方案(含寶塔設置)

我在實際解決問題時用到了 【簡單暴力解決方案】的《方法一&#xff1a;修改wp-config.php》 和 【簡單暴力-且特別粗暴-的解決方案】 更換域名時經常遇到的幾個問題&#xff1a; 1、更換域名后&#xff0c;后臺無法進入 2、更換域名后&#xff0c;網站模版錯亂&#xff0c;c…

網絡通信原理網絡層TCP/IP協議(第四十三課)

1.什么是TCP/IP 目前應用廣泛的網絡通信協議集 國際互聯網上電腦相互通信的規則、約定。 2.主機通信的三要素 IP地址:用來標識一個節點的網絡地址(區分網絡中電腦身份的地址,如人有名字) 子網掩碼:配合IP地址確定網絡號 IP路由:網關的地址,網絡的出口 3.IP地址 …

軟件第三方測評機構做安全測試有用嗎?

術語第三方測試/外包軟件測試本身是不言自明的&#xff0c;即由任何個人/獨立組織對軟件進行測試 不直接或間接參與特定軟件的開發。 在做出選擇的決定時&#xff0c;可能會想到很多問題 內部測試團隊或進行離岸第三方測試&#xff0c;首先是“我們為什么要外包軟件測試&#…

C++設計模式結構型之代理模式

一、概述 代理模式是一種結構型模式&#xff0c;在很多不同的場合具有廣泛的分類和應用。其主要實現的思想是在客戶端和真正要訪問的對象之間引入一個 代理對象&#xff08;間接層&#xff09;&#xff0c;于是&#xff0c;以往客戶端對真正對象的訪問現在變成了通過代理對…

數學建模-規劃工具箱yalmip

官網下載 實例 %% yalmip 求解 yalmip clc;clear;close all; %% %sdpvar實型變量 intvar 整形變量 binvar 0-1型變量 psdpvar(3,1); %定義變量 %目標函數 要把求最大值轉化為最小值 Objective-p(1)^2p(2)^2-p(2)*p(3);%約束條件 Constraints[0<p<1,(p(1)^2p…

音視頻FAQ(一):視頻直播卡頓

一、摘要 本文介紹了視頻直播卡頓的四個主要原因&#xff0c;用戶網絡問題、用戶設備性能問題、技術路線的選擇和實現問題。因本文主要闡述視頻直播的卡頓&#xff0c;故技術路線的實現指的是&#xff1a;CDN供應商的實現問題&#xff0c;包含CDN性能不足、CDN地區覆蓋不足。對…

Vc - Qt - 繪制窗口背景色

要在Qt中繪制一個背景顏色&#xff0c;你可以使用Qt的繪圖功能來完成。下面是一種簡單的方法&#xff1a; 步驟1&#xff1a;在你想要繪制背景顏色的QWidget&#xff08;例如QMainWindow或QDialog&#xff09;的派生類中&#xff0c;重寫 它的paintEvent函數。步驟2&#xff1a…

matlab中exp和expm的區別

exp()為數組 X 中的每個元素返回指數 e x e^{x} ex expm()計算 X 的矩陣指數。 兩個函數傳入矩陣后計算的結果是不同的&#xff0c;千萬不能混淆。之前曾經想當然得把exp里傳入矩陣當矩陣指數使用&#xff0c;也未驗證正確性&#xff0c;實不應該。

uni-app中使用pinia

目錄 Pinia 是什么&#xff1f; uni-app 使用Pinia main.js 中引用pinia 創建和注冊模塊 定義pinia方式 選項options方式 定義pinia 頁面中使用 pinia選項options方式 函數方式 定義pinia 頁面中使用 函數方式 定義的pinia Pinia 是什么&#xff1f; Pinia&#xff0…