最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis分頁查詢實戰(zhàn)案例完整流程

 更新時間:2025年09月10日 11:10:09   作者:西域情歌  
MyBatis是一個強大的Java持久層框架,支持自定義SQL和高級映射,本案例以員工工資信息管理為例,詳細講解如何在IDEA中使用MyBatis結合PageHelper插件實現(xiàn)分頁查詢功能,感興趣的朋友跟隨小編一起看看吧

簡介:MyBatis是一個強大的Java持久層框架,支持自定義SQL和高級映射。在處理大數(shù)據(jù)量場景時,分頁查詢是提升系統(tǒng)性能的重要手段。本案例以員工工資信息管理為例,詳細講解如何在IDEA中使用MyBatis結合PageHelper插件實現(xiàn)分頁查詢功能。內(nèi)容涵蓋PageHelper的引入方式、Mapper接口的定義、服務層與控制層的調(diào)用流程,以及前后端交互的分頁數(shù)據(jù)結構。通過該實戰(zhàn)案例,開發(fā)者可以快速掌握MyBatis分頁查詢的完整實現(xiàn)流程,提升開發(fā)效率與系統(tǒng)性能。

1. MyBatis框架簡介

MyBatis 是一個輕量級但功能強大的持久層框架,它摒棄了傳統(tǒng)的全自動ORM映射方式,轉(zhuǎn)而提供靈活的 SQL 控制能力。通過 XML 配置文件或注解方式,開發(fā)者可以精準定義 SQL 語句,并實現(xiàn) Java 對象與數(shù)據(jù)庫記錄之間的映射。其核心組件包括 SqlSessionFactory 、 SqlSession Mapper 接口及 XML 映射文件,構成了一個松耦合、易擴展的數(shù)據(jù)訪問層架構。在企業(yè)級開發(fā)中,MyBatis 憑借其高性能、易調(diào)試和靈活的 SQL 管理機制,被廣泛應用于復雜業(yè)務場景下的數(shù)據(jù)持久化處理,為實現(xiàn)如分頁查詢等功能提供了堅實的基礎。

2. 分頁查詢原理與應用場景

2.1 分頁查詢的基本原理

2.1.1 分頁查詢的定義

分頁查詢(Pagination Query)是指在處理大量數(shù)據(jù)時,將數(shù)據(jù)按照一定數(shù)量劃分為多個“頁”進行查詢和展示的技術。在Web應用中,這種機制被廣泛使用,尤其是在處理成千上萬條數(shù)據(jù)時,避免一次性加載全部數(shù)據(jù)到前端,從而提升用戶體驗和系統(tǒng)性能。

分頁的核心思想是: 每次只加載用戶當前需要查看的數(shù)據(jù),而不是全部數(shù)據(jù) 。通過這種方式,可以有效降低服務器壓力,提升響應速度,并優(yōu)化數(shù)據(jù)庫查詢效率。

2.1.2 分頁機制的工作流程

分頁機制的典型工作流程如下:

  1. 前端請求 :用戶在頁面上點擊下一頁、上一頁或跳轉(zhuǎn)頁碼。
  2. 參數(shù)傳遞 :前端將當前頁碼(pageNum)和每頁顯示數(shù)量(pageSize)作為參數(shù)傳遞給后端接口。
  3. 后端處理
    - 解析請求參數(shù) pageNum 和 pageSize;
    - 構建帶分頁條件的 SQL 查詢語句;
    - 執(zhí)行查詢,獲取當前頁數(shù)據(jù);
    - 同時獲取總記錄數(shù)用于計算總頁數(shù);
  4. 結果返回 :將當前頁數(shù)據(jù)和分頁信息(如總記錄數(shù)、總頁數(shù))封裝后返回給前端;
  5. 前端展示 :前端根據(jù)返回數(shù)據(jù)展示當前頁數(shù)據(jù),并渲染分頁控件。

2.1.3 數(shù)據(jù)庫層面的分頁實現(xiàn)方式

不同的數(shù)據(jù)庫系統(tǒng)支持的分頁語法略有不同。以下是主流數(shù)據(jù)庫的分頁實現(xiàn)方式:

數(shù)據(jù)庫類型分頁語法示例說明
MySQLSELECT * FROM users LIMIT 10 OFFSET 20 LIMIT 指定每頁條數(shù), OFFSET 指定偏移量
PostgreSQLSELECT * FROM users LIMIT 10 OFFSET 20 與MySQL語法一致
OracleSELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM users) A WHERE ROWNUM <= 20) WHERE RN > 10 使用嵌套子查詢和ROWNUM實現(xiàn)分頁
SQL ServerSELECT * FROM users ORDER BY id OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY 使用OFFSET和FETCH實現(xiàn)分頁

以MySQL為例的分頁SQL解析:

SELECT * FROM users LIMIT 10 OFFSET 20;
  • LIMIT 10 :每頁顯示10條數(shù)據(jù);
  • OFFSET 20 :從第21條數(shù)據(jù)開始(即跳過前20條);

該SQL語句將返回第3頁的數(shù)據(jù)(假設每頁10條),即第21~30條記錄。

2.2 分頁查詢的典型應用場景

2.2.1 Web應用中的數(shù)據(jù)列表展示

在Web應用中,數(shù)據(jù)列表是常見的展示形式,例如用戶管理、訂單列表、商品信息等。由于數(shù)據(jù)量可能非常龐大,一次性加載所有數(shù)據(jù)不僅影響用戶體驗,還會造成資源浪費。

分頁在數(shù)據(jù)列表中的作用:

  • 減少頁面加載時間;
  • 提高頁面響應速度;
  • 提升用戶體驗,避免信息過載;
  • 便于數(shù)據(jù)的瀏覽與導航。

示例:

一個電商系統(tǒng)中,商品總數(shù)為10萬條。若一次性加載所有商品信息,頁面加載時間將極長,甚至導致瀏覽器卡頓。使用分頁機制后,可以每次只加載100條數(shù)據(jù),用戶點擊翻頁時再加載后續(xù)數(shù)據(jù)。

2.2.2 大數(shù)據(jù)量下的性能優(yōu)化需求

在處理大數(shù)據(jù)量時,數(shù)據(jù)庫查詢的性能尤為重要。如果不對查詢進行分頁限制,可能會導致以下問題:

  • 查詢響應時間長 :全表掃描會消耗大量資源;
  • 內(nèi)存占用高 :一次性加載大量數(shù)據(jù)可能超出內(nèi)存限制;
  • 數(shù)據(jù)庫連接阻塞 :長時間的查詢會占用數(shù)據(jù)庫連接,影響其他操作。

解決方案:

使用分頁查詢可以有效限制返回數(shù)據(jù)量,從而:

  • 減少數(shù)據(jù)庫掃描的數(shù)據(jù)量;
  • 降低I/O和CPU使用率;
  • 縮短查詢響應時間;
  • 提高并發(fā)處理能力。

性能優(yōu)化技巧:

  • 使用索引字段作為排序條件;
  • 避免使用 SELECT * ,只查詢需要的字段;
  • 對查詢條件進行合理索引;
  • 分頁深度優(yōu)化(如游標分頁)。

2.2.3 分頁在前后端交互中的作用

分頁查詢不僅是一種數(shù)據(jù)庫層面的技術,它在前后端交互中也扮演著重要角色。

前端視角:

  • 分頁控件(如“上一頁”、“下一頁”、“跳轉(zhuǎn)頁碼”)提供良好的用戶交互體驗;
  • 支持動態(tài)加載數(shù)據(jù),實現(xiàn)懶加載或無限滾動;
  • 提供分頁狀態(tài)管理(如當前頁、總頁數(shù)、總記錄數(shù));

后端視角:

  • 分頁接口設計規(guī)范統(tǒng)一;
  • 接口返回結構標準化(如包含數(shù)據(jù)列表、總記錄數(shù)、當前頁碼等);
  • 分頁信息封裝為對象(如PageInfo)以便前端處理;

前后端交互流程示意圖(mermaid):

sequenceDiagram
    用戶->>前端: 點擊下一頁
    前端->>后端: 發(fā)送pageNum=2, pageSize=10
    后端->>數(shù)據(jù)庫: 執(zhí)行分頁SQL查詢
    數(shù)據(jù)庫-->>后端: 返回第2頁數(shù)據(jù)
    后端-->>前端: 返回JSON格式分頁結果
    前端-->>用戶: 展示第2頁數(shù)據(jù)

2.3 MyBatis中實現(xiàn)分頁的方式概述

2.3.1 手動拼接SQL分頁

手動拼接SQL是最原始的分頁實現(xiàn)方式,開發(fā)者需要在SQL語句中根據(jù)頁碼和每頁大小動態(tài)計算偏移量并拼接LIMIT/OFFSET。

示例代碼(MyBatis XML):

<select id="selectUsers" resultType="User">
    SELECT * FROM users
    <where>
        <if test="name != null">
            AND name LIKE CONCAT('%', #{name}, '%')
        </if>
    </where>
    LIMIT #{pageSize} OFFSET #{offset}
</select>

Java調(diào)用示例:

int pageNum = 2;
int pageSize = 10;
int offset = (pageNum - 1) * pageSize;
List<User> users = userMapper.selectUsers(offset, pageSize);

優(yōu)點:

  • 靈活,適用于各種數(shù)據(jù)庫;
  • 無需依賴第三方插件;

缺點:

  • 需要手動計算偏移量;
  • 不利于代碼復用;
  • 分頁邏輯分散在業(yè)務代碼中;

2.3.2 使用PageHelper插件自動分頁

PageHelper是MyBatis官方推薦的分頁插件,它可以自動攔截SQL并添加分頁語句,大大簡化了分頁邏輯的實現(xiàn)。

使用示例:

PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(users);

對應的SQL執(zhí)行過程:

SELECT * FROM users LIMIT 10 OFFSET 10;
SELECT COUNT(*) FROM users;

優(yōu)點:

  • 簡潔高效,一行代碼實現(xiàn)分頁;
  • 自動處理COUNT查詢;
  • 支持多種數(shù)據(jù)庫;
  • 與MyBatis無縫集成;

缺點:

  • 依賴PageHelper插件;
  • 對某些復雜查詢支持有限;

2.3.3 分頁插件與原生SQL的對比分析

特性原生SQL手動分頁PageHelper插件分頁
實現(xiàn)方式手動拼接LIMIT/OFFSET自動攔截并修改SQL
分頁邏輯分散在業(yè)務代碼中集中統(tǒng)一處理
維護成本高,容易出錯低,易于維護
支持COUNT查詢需手動編寫自動添加
靈活性高,可自定義依賴插件配置
性能影響無額外開銷插件有一定性能開銷
推薦場景簡單查詢、數(shù)據(jù)庫兼容要求高中大型項目、快速開發(fā)

結論:

  • 對于小型項目或特定數(shù)據(jù)庫兼容需求,可以使用原生SQL手動分頁;
  • 對于中大型項目、快速開發(fā)和標準化分頁處理,推薦使用PageHelper插件;
  • 在使用PageHelper時,需注意其對復雜查詢(如JOIN、子查詢)的兼容性,并結合實際情況選擇使用方式。

3. PageHelper插件集成與配置

在實際開發(fā)中,處理大量數(shù)據(jù)時分頁查詢是必不可少的。PageHelper 是 MyBatis 中非常流行的一款分頁插件,它能夠簡化分頁邏輯,避免手動拼接 SQL 分頁語句的復雜性。本章將深入講解如何將 PageHelper 插件集成到項目中,并進行相關配置與使用,為后續(xù)章節(jié)中分頁方法的實現(xiàn)打下堅實基礎。

3.1 PageHelper插件概述

PageHelper 是一個專為 MyBatis 設計的分頁插件,能夠自動識別 SQL 語句并進行分頁處理,極大提升了開發(fā)效率和代碼可維護性。

3.1.1 PageHelper的功能與優(yōu)勢

PageHelper 提供了以下核心功能:

  • 自動分頁 :通過簡單的 API 調(diào)用即可實現(xiàn) SQL 分頁。
  • 多數(shù)據(jù)庫支持 :支持 MySQL、Oracle、SQL Server、PostgreSQL 等主流數(shù)據(jù)庫。
  • 靈活配置 :允許配置分頁參數(shù)、合理化分頁、默認頁面大小等。
  • 兼容性好 :與 Spring、Spring Boot、MyBatis 注解和 XML 映射方式兼容良好。
  • 性能優(yōu)化 :底層采用攔截器機制,對 SQL 進行改寫,減少冗余操作。

相較于手動拼接 SQL 分頁,使用 PageHelper 的優(yōu)勢在于:

  • 開發(fā)效率高 :減少重復代碼。
  • 可維護性強 :集中管理分頁邏輯。
  • 擴展性好 :支持多種數(shù)據(jù)庫和自定義分頁策略。

3.1.2 插件的版本選擇與兼容性分析

PageHelper 的版本更新頻繁,不同版本與 MyBatis 和 Spring Boot 的兼容性略有不同。常見版本如下:

PageHelper 版本MyBatis 版本要求Spring Boot 版本建議說明
5.2.0≥3.4.0≥2.0.0最新穩(wěn)定版,推薦使用
5.1.11≥3.4.0≥1.5.0穩(wěn)定版本,廣泛使用
4.x3.x1.x舊版,不推薦新項目使用

在選擇版本時,應優(yōu)先考慮與當前項目依賴版本的匹配性。推薦使用 5.2.0 5.1.11 版本。

3.2 PageHelper的引入與配置

為了在項目中使用 PageHelper,需要將其作為依賴引入,并在 MyBatis 或 Spring Boot 配置文件中進行相應設置。

3.2.1 Maven依賴的引入方式

pom.xml 中添加如下依賴:

<!-- MyBatis PageHelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>5.2.0</version>
</dependency>

說明:

  • pagehelper-spring-boot-starter 是 Spring Boot 項目專用的 starter 模塊,自動完成插件的配置。
  • 若非 Spring Boot 項目,可使用 pagehelper 模塊,并手動配置插件。

3.2.2 在MyBatis配置文件中添加插件配置

對于非 Spring Boot 項目(傳統(tǒng) Spring + MyBatis),需在 mybatis-config.xml 中手動添加插件配置:

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 可選參數(shù) -->
        <property name="helperDialect" value="mysql"/>
        <property name="reasonable" value="true"/>
        <property name="supportMethodsArguments" value="true"/>
        <property name="params" value="count=countSql"/>
    </plugin>
</plugins>

參數(shù)說明:

參數(shù)名含義示例值
helperDialect指定數(shù)據(jù)庫方言mysql、oracle、sqlserver
reasonable是否啟用合理化分頁(頁碼超出范圍時自動調(diào)整)true、false
supportMethodsArguments是否支持通過 Mapper 接口參數(shù)傳遞分頁信息true
params配置 count 查詢的參數(shù)名count=countSql

3.2.3 Spring Boot項目中的自動配置方式

在 Spring Boot 項目中,除了引入依賴,還可以通過 application.yml application.properties 文件進行配置:

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

說明:

  • helper-dialect :指定數(shù)據(jù)庫類型,用于分頁 SQL 的自動改寫。
  • reasonable :開啟合理化分頁,如當前頁碼大于最大頁碼時,自動返回最后一頁數(shù)據(jù)。
  • support-methods-arguments :啟用接口方法參數(shù)中分頁信息的自動識別。
  • params :定義 count 查詢參數(shù)名稱。

3.3 PageHelper的基本使用流程

PageHelper 的使用流程主要包括分頁前的準備、分頁方法的調(diào)用以及分頁結果的獲取。

3.3.1 分頁前的準備工作

在調(diào)用分頁方法之前,必須先調(diào)用 PageHelper.startPage(pageNum, pageSize) 方法,該方法會設置當前線程的分頁上下文。

import com.github.pagehelper.PageHelper;
import java.util.List;
public List<User> getUsers(int pageNum, int pageSize) {
    // 開啟分頁
    PageHelper.startPage(pageNum, pageSize);
    // 查詢用戶列表(自動分頁)
    return userMapper.selectAll();
}

說明:

  • pageNum :當前頁碼,從 1 開始。
  • pageSize :每頁顯示的數(shù)據(jù)條數(shù)。
  • 該方法必須在查詢語句之前調(diào)用,否則分頁失效。

3.3.2 分頁方法調(diào)用與結果返回

調(diào)用 PageHelper.startPage() 后,緊接著執(zhí)行查詢語句即可。PageHelper 會自動攔截 SQL,并添加 LIMIT 子句實現(xiàn)分頁。

執(zhí)行查詢后,可以通過 PageInfo<T> 類封裝分頁信息:

import com.github.pagehelper.PageInfo;
public PageInfo<User> getUsers(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<User> users = userMapper.selectAll();
    return new PageInfo<>(users);
}

PageInfo 包含了豐富的分頁信息,如總記錄數(shù)、當前頁、總頁數(shù)等,便于前端展示。

3.3.3 常見配置參數(shù)的使用說明

參數(shù)作用使用示例
pageNum 當前頁碼PageHelper.startPage(2, 10);
pageSize 每頁數(shù)量PageHelper.startPage(1, 20);
count 是否執(zhí)行 count 查詢默認為 true,可通過 PageHelper.startPage(pageNum, pageSize, false) 關閉
reasonable 是否啟用合理化分頁在配置文件中設置為 true
pageSizeZero 是否允許 pageSize 為 0可設置為 true 表示不分頁
示例:關閉 count 查詢

在某些場景下,如果已知總記錄數(shù),可避免重復執(zhí)行 count 查詢:

PageHelper.startPage(1, 10, false);
List<User> users = userMapper.selectAll();

此時 PageHelper 不會生成 count SQL,從而提高性能。

示例:分頁結果封裝為 PageInfo
PageInfo<User> pageInfo = new PageInfo<>(users);
System.out.println("當前頁碼:" + pageInfo.getPageNum());
System.out.println("每頁數(shù)量:" + pageInfo.getPageSize());
System.out.println("總記錄數(shù):" + pageInfo.getTotal());
System.out.println("總頁數(shù):" + pageInfo.getPages());

輸出結果如下:

當前頁碼:1
每頁數(shù)量:10
總記錄數(shù):123
總頁數(shù):13

流程圖:PageHelper分頁執(zhí)行流程
graph TD
    A[調(diào)用PageHelper.startPage] --> B{判斷是否合理化分頁}
    B -->|是| C[自動調(diào)整頁碼]
    B -->|否| D[使用原始頁碼]
    C --> E[生成分頁SQL]
    D --> E
    E --> F[執(zhí)行SQL查詢]
    F --> G[返回分頁數(shù)據(jù)]
    G --> H[創(chuàng)建PageInfo對象]
    H --> I[返回給調(diào)用方]

該流程圖清晰地展示了 PageHelper 分頁的核心執(zhí)行流程,從開始分頁到最終封裝返回數(shù)據(jù)的全過程。

通過本章的學習,我們了解了 PageHelper 的功能與優(yōu)勢,掌握了其在 Maven 項目中的引入方式,以及在 MyBatis 和 Spring Boot 中的配置方法,并詳細講解了其基本使用流程及常見參數(shù)設置。下一章將圍繞 Mapper 接口設計分頁方法展開,進一步深入 MyBatis 分頁的實踐應用。

4. Mapper接口分頁方法設計

在 MyBatis 框架中,Mapper 接口是實現(xiàn)數(shù)據(jù)庫操作的核心部分。設計良好的 Mapper 接口不僅能夠提高代碼的可維護性,還能有效支持分頁查詢功能。本章將深入探討 Mapper 接口中分頁方法的設計規(guī)范、分頁 SQL 的編寫與優(yōu)化策略,以及接口測試與驗證方法,幫助開發(fā)者構建高效、穩(wěn)定的分頁機制。

4.1 Mapper接口的設計規(guī)范

4.1.1 接口命名與SQL映射關系

在設計 Mapper 接口時,良好的命名規(guī)范有助于提高代碼的可讀性和維護性。通常建議使用 IEntityMapper 的命名方式,其中 Entity 表示操作的實體對象,例如 IUserMapper 、 IOrderMapper 。

接口中的方法名應與 XML 映射文件中的 SQL ID 保持一致,以確保 MyBatis 能正確綁定方法與 SQL 語句。例如:

public interface IUserMapper {
    List<User> selectAllUsers();
}

對應的 XML 文件中:

<select id="selectAllUsers" resultType="User">
    SELECT * FROM users
</select>

這種命名方式不僅提高了代碼的可讀性,也便于后期維護和調(diào)試。

4.1.2 使用PageHelper進行分頁的方法定義

在使用 PageHelper 插件進行分頁時,Mapper 接口中的方法設計需遵循一定的規(guī)范。PageHelper 通過攔截查詢語句,自動為其添加分頁邏輯,因此接口方法只需返回 List<T> 類型即可,PageHelper 會在執(zhí)行過程中自動封裝分頁信息。

示例代碼如下:

public interface IUserMapper {
    List<User> selectAllUsers();
}

在調(diào)用該方法前,需先調(diào)用 PageHelper.startPage(pageNum, pageSize) 方法啟動分頁:

PageHelper.startPage(1, 10);
List<User> users = userMapper.selectAllUsers();

PageHelper 會自動對 selectAllUsers() 方法的查詢結果進行分頁處理,并封裝成 PageInfo 對象,便于后續(xù)使用。

4.2 分頁SQL語句的編寫與優(yōu)化

4.2.1 動態(tài)SQL與分頁結合使用

在實際開發(fā)中,經(jīng)常需要根據(jù)不同的條件進行分頁查詢。MyBatis 提供了 <if> 、 <choose> 、 <where> 等標簽,用于構建動態(tài) SQL,從而實現(xiàn)靈活的查詢邏輯。

例如,以下是一個帶有動態(tài)查詢條件的分頁 SQL 示例:

<select id="selectUsersByCondition" resultType="User">
    SELECT * FROM users
    <where>
        <if test="username != null and username != ''">
            AND username LIKE CONCAT('%', #{username}, '%')
        </if>
        <if test="email != null and email != ''">
            AND email = #{email}
        </if>
    </where>
</select>

在 Java 代碼中調(diào)用:

PageHelper.startPage(1, 10);
List<User> users = userMapper.selectUsersByCondition("john", null);

該查詢會根據(jù)傳入的參數(shù)動態(tài)生成 SQL,確保分頁結果的準確性。

4.2.2 分頁SQL的性能考量與優(yōu)化技巧

分頁查詢在處理大數(shù)據(jù)量時容易造成性能問題。以下是一些常見的優(yōu)化技巧:

  1. 避免使 SELECT * :指定查詢字段,減少不必要的數(shù)據(jù)傳輸。
  2. 使用索引 :確保分頁字段(如主鍵或常用查詢字段)上有合適的索引。
  3. 避免深分頁問題 :對于 LIMIT offset, size 這種方式,當 offset 值很大時會導致性能下降,建議采用“游標分頁”或“基于時間戳”的方式。
  4. 合理設置分頁大小 :避免一次請求返回過多數(shù)據(jù),建議每頁 10~50 條為宜。

示例優(yōu)化后的 SQL:

<select id="selectUsersByCondition" resultType="User">
    SELECT id, username, email FROM users
    <where>
        <if test="username != null and username != ''">
            AND username LIKE CONCAT('%', #{username}, '%')
        </if>
        <if test="email != null and email != ''">
            AND email = #{email}
        </if>
    </where>
</select>

通過指定字段查詢,減少數(shù)據(jù)庫 IO 消耗,提升查詢效率。

4.3 分頁接口的測試與驗證

4.3.1 單元測試的設計與執(zhí)行

為了確保分頁接口的正確性和穩(wěn)定性,必須進行充分的單元測試??梢允褂?JUnit 框架結合 Spring Boot Test 進行測試。

示例單元測試代碼如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
    @Autowired
    private IUserMapper userMapper;
    @Test
    public void testSelectUsersWithPagination() {
        PageHelper.startPage(1, 10);
        List<User> users = userMapper.selectAllUsers();
        Assert.notEmpty(users, "用戶列表不能為空");
        Assert.isTrue(users.size() <= 10, "返回結果數(shù)量不應超過每頁限制");
    }
}

該測試方法驗證了分頁查詢是否返回了正確的數(shù)據(jù)量,并確保接口邏輯無誤。

4.3.2 分頁結果的驗證與異常處理

在實際運行中,可能會出現(xiàn)分頁失敗、SQL 錯誤等情況。因此,在測試中還需驗證異常處理邏輯。

例如,測試當傳入非法頁碼時是否拋出異常:

@Test(expected = RuntimeException.class)
public void testInvalidPageNumber() {
    PageHelper.startPage(-1, 10); // 無效頁碼
    userMapper.selectAllUsers();
}

此外,還可以通過日志記錄、異常捕獲等方式進行異常處理,提升系統(tǒng)的健壯性。

附錄:分頁流程圖

以下是分頁查詢在 MyBatis 中的完整執(zhí)行流程圖:

graph TD
    A[調(diào)用Mapper方法] --> B{PageHelper是否啟動}
    B -->|是| C[攔截SQL并添加分頁語句]
    C --> D[執(zhí)行SQL查詢]
    D --> E[封裝結果為PageInfo]
    B -->|否| F[直接執(zhí)行SQL查詢]
    F --> G[返回原始結果]

該流程圖清晰地展示了 PageHelper 在分頁查詢中的作用機制,有助于理解其工作原理。

小結

本章詳細介紹了在 MyBatis 中設計 Mapper 接口進行分頁查詢的方法,包括接口命名規(guī)范、PageHelper 的使用方式、動態(tài) SQL 的編寫與優(yōu)化技巧,以及接口的測試與異常處理。通過本章的學習,開發(fā)者可以掌握如何在實際項目中高效地實現(xiàn)分頁功能,并優(yōu)化其性能表現(xiàn)。

5. Service層分頁邏輯實現(xiàn)

在Spring Boot架構中,Service層承擔著核心業(yè)務邏輯的處理職責。在分頁查詢場景下,Service層不僅要協(xié)調(diào)Mapper層的數(shù)據(jù)獲取,還需對分頁結果進行封裝與處理。本章將從Service層的分頁邏輯設計、數(shù)據(jù)封裝方式、異常處理機制等方面深入探討,并通過代碼實例展示完整的實現(xiàn)流程。

5.1 Service層職責與分頁邏輯設計

Service層作為連接Controller與Mapper的橋梁,其設計直接影響分頁查詢的性能與可維護性。合理的邏輯設計能夠提高系統(tǒng)的可擴展性與健壯性。

5.1.1 業(yè)務邏輯與分頁的結合方式

在企業(yè)級應用中,分頁查詢往往不是單純的數(shù)據(jù)庫查詢,而是需要結合業(yè)務規(guī)則進行過濾、排序或聚合。例如,在用戶管理模塊中,可能需要根據(jù)角色、狀態(tài)等條件進行篩選后再分頁。

public interface UserService {
    PageInfo<UserDTO> getUsersByRoleAndStatus(String role, String status, int pageNum, int pageSize);
}

在該接口中, role status 是業(yè)務篩選條件, pageNum pageSize 用于分頁控制。Service層通過組合這些參數(shù)調(diào)用Mapper層的查詢接口。

分頁邏輯流程圖(Mermaid格式)
graph TD
    A[Controller層接收請求] --> B[調(diào)用Service層方法]
    B --> C[Service層封裝參數(shù)]
    C --> D[調(diào)用PageHelper.startPage()]
    D --> E[執(zhí)行Mapper層查詢]
    E --> F[封裝PageInfo對象]
    F --> G[返回分頁結果]

5.1.2 調(diào)用Mapper接口實現(xiàn)分頁查詢

Service層調(diào)用Mapper接口前,需使用PageHelper插件開啟分頁功能。以下是一個典型的調(diào)用示例:

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public PageInfo<UserDTO> getUsersByRoleAndStatus(String role, String status, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<UserDTO> users = userMapper.selectByRoleAndStatus(role, status);
        return new PageInfo<>(users);
    }
}
代碼逐行分析:
  • 第7行 :注入UserMapper,用于執(zhí)行數(shù)據(jù)庫查詢。
  • 第11行 :調(diào)用 PageHelper.startPage() 方法,指定當前頁碼和每頁記錄數(shù)。
  • 第12行 :調(diào)用Mapper接口的查詢方法,返回當前頁的數(shù)據(jù)列表。
  • 第13行 :使用MyBatis PageHelper提供的PageInfo類封裝分頁信息,包括總記錄數(shù)、總頁數(shù)、當前頁數(shù)據(jù)等。

5.2 分頁數(shù)據(jù)的處理與封裝

分頁查詢的結果通常包含當前頁數(shù)據(jù)、總記錄數(shù)、頁碼信息等。Service層需對這些數(shù)據(jù)進行封裝,并可能附加業(yè)務邏輯處理。

5.2.1 PageInfo對象的封裝過程

PageInfo是PageHelper提供的分頁信息封裝類,包含以下核心字段:

字段名類型說明
pageNumint當前頁碼
pageSizeint每頁記錄數(shù)
sizeint當前頁實際記錄數(shù)
totallong總記錄數(shù)
pagesint總頁數(shù)
listList當前頁的數(shù)據(jù)列表
isFirstPageboolean是否為第一頁
isLastPageboolean是否為最后一頁
封裝示例:
PageInfo<UserDTO> pageInfo = new PageInfo<>(users);

該語句自動計算出總頁數(shù)、是否為首頁/尾頁等信息,開發(fā)者可直接使用這些字段進行頁面展示。

5.2.2 分頁數(shù)據(jù)的業(yè)務處理邏輯

在實際業(yè)務中,分頁結果可能需要進行額外處理,例如:

  • 數(shù)據(jù)轉(zhuǎn)換:將數(shù)據(jù)庫實體轉(zhuǎn)換為DTO(數(shù)據(jù)傳輸對象)。
  • 數(shù)據(jù)脫敏:對敏感字段進行隱藏或加密。
  • 數(shù)據(jù)聚合:對查詢結果進行統(tǒng)計或分組。

以下是一個帶有數(shù)據(jù)轉(zhuǎn)換與脫敏處理的示例:

@Override
public PageInfo<UserDTO> getUsersByRoleAndStatus(String role, String status, int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<User> users = userMapper.selectByRoleAndStatus(role, status);
    // 數(shù)據(jù)轉(zhuǎn)換與脫敏
    List<UserDTO> dtoList = users.stream()
        .map(user -> {
            UserDTO dto = new UserDTO();
            dto.setId(user.getId());
            dto.setUsername(user.getUsername());
            dto.setEmail("****@example.com"); // 脫敏處理
            return dto;
        })
        .collect(Collectors.toList());
    return new PageInfo<>(dtoList);
}
代碼邏輯說明:
  • 第6~13行 :將User實體轉(zhuǎn)換為UserDTO,并對email字段進行脫敏處理。
  • 第14行 :封裝為PageInfo對象,便于Controller層返回。

5.3 Service層的異常處理與日志記錄

在分頁操作中,可能出現(xiàn)SQL執(zhí)行異常、參數(shù)校驗失敗、空指針等錯誤。良好的異常處理機制與日志記錄策略有助于快速定位問題。

5.3.1 分頁失敗的異常處理策略

建議使用Spring的全局異常處理器統(tǒng)一處理異常,以下為Service層的局部處理示例:

@Override
public PageInfo<UserDTO> getUsersByRoleAndStatus(String role, String status, int pageNum, int pageSize) {
    try {
        PageHelper.startPage(pageNum, pageSize);
        List<User> users = userMapper.selectByRoleAndStatus(role, status);
        return new PageInfo<>(convertToDTO(users));
    } catch (Exception e) {
        // 捕獲異常并封裝為業(yè)務異常
        throw new BusinessException("分頁查詢失?。? + e.getMessage(), e);
    }
}
異常處理流程圖(Mermaid格式)
graph TD
    A[Service層執(zhí)行分頁] --> B{是否發(fā)生異常?}
    B -->|是| C[捕獲異常]
    C --> D[封裝為業(yè)務異常]
    D --> E[拋出異常]
    B -->|否| F[正常返回PageInfo]

5.3.2 日志記錄與問題定位技巧

建議在Service層引入日志記錄器(如Logback、SLF4J),記錄關鍵參數(shù)和執(zhí)行結果:

private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Override
public PageInfo<UserDTO> getUsersByRoleAndStatus(String role, String status, int pageNum, int pageSize) {
    logger.info("開始分頁查詢,角色:{}, 狀態(tài):{}, 當前頁:{}, 每頁記錄數(shù):{}", role, status, pageNum, pageSize);
    try {
        PageHelper.startPage(pageNum, pageSize);
        List<User> users = userMapper.selectByRoleAndStatus(role, status);
        PageInfo<UserDTO> pageInfo = new PageInfo<>(convertToDTO(users));
        logger.info("分頁查詢成功,總記錄數(shù):{}", pageInfo.getTotal());
        return pageInfo;
    } catch (Exception e) {
        logger.error("分頁查詢失?。?, e);
        throw new BusinessException("分頁查詢失敗:" + e.getMessage(), e);
    }
}
日志輸出示例:
INFO  UserServiceImpl - 開始分頁查詢,角色:admin, 狀態(tài):active, 當前頁:1, 每頁記錄數(shù):10
INFO  UserServiceImpl - 分頁查詢成功,總記錄數(shù):50
日志記錄建議:
  • 記錄請求參數(shù)、分頁參數(shù)、執(zhí)行結果等關鍵信息。
  • 使用結構化日志格式(如JSON)便于日志分析系統(tǒng)解析。
  • 在異常發(fā)生時,記錄堆棧信息以便快速定位問題。

本章系統(tǒng)講解了Service層在分頁查詢中的核心職責,包括分頁邏輯設計、數(shù)據(jù)封裝方式以及異常處理與日志記錄策略。通過代碼實例與流程圖的結合,展示了如何在實際開發(fā)中高效實現(xiàn)分頁功能,并確保系統(tǒng)的穩(wěn)定性與可維護性。下一章將重點介紹Controller層如何接收分頁請求并返回統(tǒng)一格式的響應。

6. Controller層接口接收與返回處理

在基于MyBatis和PageHelper構建的分頁系統(tǒng)中,Controller層作為前后端交互的核心環(huán)節(jié),承擔著接收請求參數(shù)、調(diào)用業(yè)務邏輯并返回結構化響應的關鍵任務。本章將深入探討Controller層接口設計的規(guī)范、分頁數(shù)據(jù)的返回格式設計,并結合實際代碼示例說明如何通過接口測試工具(如Postman)進行調(diào)試和問題排查。

6.1 Controller層的接口設計原則

在Spring Boot框架中,Controller層主要通過 @RestController 注解實現(xiàn),其設計需遵循RESTful風格,同時兼顧接口的健壯性和可維護性。

6.1.1 接口路徑與請求方式的定義

接口路徑的設計應遵循清晰、簡潔的原則,通常以名詞復數(shù)形式表示資源集合。例如:

@GetMapping("/users")
public PageInfo<User> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
    return userService.getUsersByPage(pageNum, pageSize);
}
  • 請求方式 :GET 用于獲取資源,POST 用于提交數(shù)據(jù)。
  • 路徑命名 /users 表示用戶資源, /orders 表示訂單資源,遵循小寫復數(shù)命名。
  • 版本控制 :建議在URL中加入版本號,如 /v1/users ,便于后續(xù)接口升級。

6.1.2 請求參數(shù)的接收與校驗機制

Controller層接收參數(shù)時,應進行基本的校驗,防止非法輸入導致系統(tǒng)異常。Spring Boot提供了 @Valid 注解結合 javax.validation 實現(xiàn)參數(shù)校驗。

示例:帶參數(shù)校驗的分頁接口
@RestController
@RequestMapping("/v1/users")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping
    public ResponseEntity<PageInfo<User>> getUsers(
            @RequestParam @Min(1) int pageNum,
            @RequestParam @Min(1) @Max(100) int pageSize) {
        PageInfo<User> pageInfo = userService.getUsersByPage(pageNum, pageSize);
        return ResponseEntity.ok(pageInfo);
    }
}
  • @Min(1) :確保頁碼至少為1。
  • @Max(100) :限制每頁最多100條數(shù)據(jù),防止性能問題。
  • 使用 ResponseEntity 封裝響應,增強接口返回的可擴展性。

6.2 分頁數(shù)據(jù)的返回格式設計

為了前后端交互的一致性和統(tǒng)一性,Controller層返回的分頁數(shù)據(jù)應具備標準化結構,通常采用JSON格式,并封裝統(tǒng)一的響應對象。

6.2.1 JSON格式的封裝與統(tǒng)一返回

建議使用統(tǒng)一的響應封裝類 ResponseResult ,其結構如下:

public class ResponseResult<T> {
    private int code;
    private String message;
    private T data;

    // 構造方法、getters、setters
}

結合PageInfo返回:

@GetMapping
public ResponseResult<PageInfo<User>> getUsers(
        @RequestParam @Min(1) int pageNum,
        @RequestParam @Min(1) @Max(100) int pageSize) {
    PageInfo<User> pageInfo = userService.getUsersByPage(pageNum, pageSize);
    return ResponseResult.success(pageInfo);
}
響應示例:
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 10,
    "total": 150,
    "pages": 15,
    "list": [
      {"id": 1, "name": "張三", "email": "zhangsan@example.com"},
      ...
    ]
  }
}
  • code :狀態(tài)碼,如200表示成功。
  • message :描述性信息,便于調(diào)試。
  • data :封裝分頁數(shù)據(jù)對象 PageInfo

6.2.2 PageInfo對象在接口中的返回結構

PageInfo 對象是PageHelper提供的分頁結果封裝類,包含以下核心字段:

字段名類型描述
pageNumint當前頁碼
pageSizeint每頁數(shù)量
totallong總記錄數(shù)
pagesint總頁數(shù)
listList當前頁的數(shù)據(jù)集合
isFirstPageboolean是否為首頁
isLastPageboolean是否為尾頁

mermaid流程圖:Controller層數(shù)據(jù)流向

graph TD
    A[前端請求] --> B[Controller接收參數(shù)]
    B --> C{參數(shù)校驗是否通過?}
    C -->|是| D[調(diào)用Service獲取PageInfo]
    D --> E[封裝ResponseResult]
    E --> F[返回JSON格式數(shù)據(jù)]
    C -->|否| G[返回錯誤信息]

6.3 接口測試與調(diào)試

接口開發(fā)完成后,必須進行充分的測試與調(diào)試,確保分頁邏輯正確、數(shù)據(jù)返回格式一致、異常處理得當。

6.3.1 Postman測試接口的使用

使用Postman可以快速測試RESTful接口,以下是測試步驟:

  1. 打開Postman ,新建請求。
  2. 設置請求方式 :GET。
  3. 輸入請求地址 :例如 http://localhost:8080/v1/users?pageNum=1&pageSize=10 。
  4. 發(fā)送請求 ,查看返回的JSON結構是否符合預期。
  5. 測試異常情況 :如 pageNum=0 、 pageSize=200 ,驗證是否返回400錯誤及提示信息。
示例截圖說明(文字描述)

假設Postman界面左側為請求輸入?yún)^(qū)域,輸入URL和參數(shù)后點擊“Send”按鈕,右側顯示響應結果。響應體應包含完整的PageInfo數(shù)據(jù)結構,并且狀態(tài)碼為200或400。

6.3.2 接口調(diào)用過程中的問題排查

常見問題及排查方法如下:

問題現(xiàn)象原因分析解決方法
返回數(shù)據(jù)為空SQL語句錯誤、PageHelper未生效檢查SQL是否執(zhí)行,日志輸出是否開啟
分頁不準確pageNum或pageSize參數(shù)傳遞錯誤添加參數(shù)校驗,確保參數(shù)合法
接口響應超時數(shù)據(jù)量過大或SQL未優(yōu)化檢查SQL執(zhí)行計劃,添加索引,優(yōu)化查詢語句
PageInfo字段缺失或異常PageHelper版本兼容性問題升級PageHelper版本,或更換Spring Boot版本
示例:日志輸出輔助調(diào)試

在Spring Boot中啟用SQL日志輸出:

# application.yml
logging:
  level:
    com.example.mapper: debug

輸出示例:

DEBUG  c.e.m.UserMapper.getUsersByPage - ==>  Preparing: SELECT * FROM users LIMIT 0,10
DEBUG  c.e.m.UserMapper.getUsersByPage - ==> Parameters: 
DEBUG  c.e.m.UserMapper.getUsersByPage - <==      Total: 10

通過日志可以確認分頁是否生效,SQL是否被PageHelper攔截并修改。

本章從Controller層接口設計原則出發(fā),深入講解了分頁接口的路徑定義、參數(shù)接收與校驗機制,并詳細說明了如何設計統(tǒng)一的JSON返回格式。通過引入 ResponseResult PageInfo 對象,實現(xiàn)結構化數(shù)據(jù)返回。最后,結合Postman測試與常見問題排查技巧,幫助開發(fā)者高效完成接口調(diào)試與問題定位。

7. PageInfo對象使用詳解

7.1 PageInfo對象的結構與屬性

PageInfo 是 PageHelper 提供的一個分頁數(shù)據(jù)封裝類,它封裝了當前頁的數(shù)據(jù)信息以及與分頁相關的各種元數(shù)據(jù)。在使用 PageHelper 進行分頁查詢后,通過調(diào)用 PageHelper.startPage() 方法后緊跟查詢語句,會自動將結果封裝為 PageInfo 對象。

7.1.1 PageInfo類的核心字段說明

PageInfo 類包含以下常用字段:

字段名類型描述
pageNumint當前頁碼
pageSizeint每頁記錄數(shù)
sizeint當前頁的實際數(shù)據(jù)條數(shù)
startRowint當前頁第一個數(shù)據(jù)的行號
endRowint當前頁最后一個數(shù)據(jù)的行號
totallong總記錄數(shù)
pagesint總頁數(shù)
listList<?>當前頁的數(shù)據(jù)集合
prePageint上一頁頁碼
nextPageint下一頁頁碼
isFirstPageboolean是否為第一頁
isLastPageboolean是否為最后一頁
hasPreviousPageboolean是否存在上一頁
hasNextPageboolean是否存在下一頁

7.1.2 分頁信息的封裝過程

在 Service 層調(diào)用 Mapper 查詢后,PageHelper 會自動將查詢結果封裝成 PageInfo 對象。例如:

PageHelper.startPage(pageNum, pageSize);  // 設置分頁參數(shù)
List<User> users = userMapper.selectAll(); // 執(zhí)行查詢
PageInfo<User> pageInfo = new PageInfo<>(users); // 封裝成PageInfo

上述代碼中, PageHelper.startPage() 會攔截下一條 SQL 查詢,并自動添加分頁邏輯。查詢結果通過 PageInfo 構造函數(shù)進行封裝,返回包含完整分頁信息的對象。

7.2 PageInfo在前端展示中的應用

7.2.1 前端頁面獲取與解析PageInfo數(shù)據(jù)

在前后端分離架構中,Controller 層通常會將 PageInfo 對象以 JSON 格式返回給前端。例如:

@GetMapping("/users")
public ResponseEntity<PageInfo<User>> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
    PageInfo<User> pageInfo = userService.getUsers(pageNum, pageSize);
    return ResponseEntity.ok(pageInfo);
}

前端(如 Vue、React、Angular 等框架)接收到數(shù)據(jù)后,可以輕松解析并展示分頁信息:

fetch(`/api/users?pageNum=1&pageSize=10`)
  .then(response => response.json())
  .then(data => {
    console.log('當前頁碼:', data.pageNum);
    console.log('總頁數(shù):', data.pages);
    console.log('用戶列表:', data.list);
  });

7.2.2 分頁控件的動態(tài)渲染與交互邏輯

前端可以基于 PageInfo 中的 pageNum 、 pages 、 hasPreviousPage hasNextPage 等字段來動態(tài)渲染分頁控件,并實現(xiàn)跳轉(zhuǎn)邏輯。

例如,使用 Vue 渲染一個簡單的分頁組件:

<template>
  <div class="pagination">
    <button :disabled="!pageInfo.hasPreviousPage" @click="prevPage">上一頁</button>
    <span>當前頁:{{ pageInfo.pageNum }} / {{ pageInfo.pages }}</span>
    <button :disabled="!pageInfo.hasNextPage" @click="nextPage">下一頁</button>
  </div>
</template>
<script>
export default {
  props: ['pageInfo'],
  methods: {
    prevPage() {
      this.$emit('change-page', this.pageInfo.pageNum - 1);
    },
    nextPage() {
      this.$emit('change-page', this.pageInfo.pageNum + 1);
    }
  }
}
</script>

通過監(jiān)聽按鈕點擊事件并重新請求對應頁碼的數(shù)據(jù),實現(xiàn)頁面切換。

7.3 PageInfo的擴展與自定義封裝

7.3.1 自定義分頁對象的封裝方式

雖然 PageInfo 已經(jīng)提供了豐富的字段,但在某些業(yè)務場景中,可能需要額外的字段或更靈活的數(shù)據(jù)結構。此時可以自定義一個分頁響應類來封裝 PageInfo 的數(shù)據(jù)。

例如:

public class CustomPageResponse<T> {
    private int currentPage;
    private int pageSize;
    private long totalElements;
    private int totalPages;
    private List<T> content;
    private boolean hasNext;
    private boolean hasPrevious;
    public static <T> CustomPageResponse<T> fromPageInfo(PageInfo<T> pageInfo) {
        CustomPageResponse<T> response = new CustomPageResponse<>();
        response.setCurrentPage(pageInfo.getPageNum());
        response.setPageSize(pageInfo.getPageSize());
        response.setTotalElements(pageInfo.getTotal());
        response.setTotalPages(pageInfo.getPages());
        response.setContent(pageInfo.getList());
        response.setHasNext(pageInfo.isHasNextPage());
        response.setHasPrevious(pageInfo.isHasPreviousPage());
        return response;
    }
    // Getters and Setters
}

在 Controller 中返回該對象:

@GetMapping("/users")
public ResponseEntity<CustomPageResponse<User>> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
    PageInfo<User> pageInfo = userService.getUsers(pageNum, pageSize);
    CustomPageResponse<User> response = CustomPageResponse.fromPageInfo(pageInfo);
    return ResponseEntity.ok(response);
}

7.3.2 PageInfo與其他業(yè)務對象的整合使用

在實際業(yè)務中,分頁信息可能需要與其它數(shù)據(jù)(如統(tǒng)計數(shù)據(jù)、篩選條件、權限信息等)一起返回。此時可以將 PageInfo 作為響應對象的一個字段進行封裝。

例如:

public class UserPageResponse {
    private PageInfo<User> pageInfo;
    private int activeUserCount;
    private int totalUserCount;

    // 構造方法、Getters、Setters
}

Controller 返回示例:

@GetMapping("/users")
public ResponseEntity<UserPageResponse> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
    PageInfo<User> pageInfo = userService.getUsers(pageNum, pageSize);
    int activeCount = userService.getActiveUserCount();
    int totalCount = pageInfo.getTotal();

    UserPageResponse response = new UserPageResponse();
    response.setPageInfo(pageInfo);
    response.setActiveUserCount(activeCount);
    response.setTotalUserCount(totalCount);

    return ResponseEntity.ok(response);
}

這樣,前端可以在獲取分頁數(shù)據(jù)的同時,也獲得其他業(yè)務信息,提升接口的靈活性和復用性。

到此這篇關于MyBatis分頁查詢實戰(zhàn)案例詳解的文章就介紹到這了,更多相關MyBatis分頁查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVAEE Filter 過濾器設置是否緩存實例詳解

    JAVAEE Filter 過濾器設置是否緩存實例詳解

    網(wǎng)頁中,每次的客戶端訪問服務器,有部分不用重復請求的,這樣可以減輕服務器的工作量。那么如何設置客戶端是否都緩存呢?接下來通過本文給大家介紹JAVAEE Filter 過濾器設置是否緩存的實例,感興趣的朋友一起學習吧
    2016-05-05
  • springMVC中HttpMessageConverter的具體使用

    springMVC中HttpMessageConverter的具體使用

    HttpMessageConverter,報文信息轉(zhuǎn)換器,將請求報文轉(zhuǎn)換為Java對象,本文主要介紹了springMVC中HttpMessageConverter的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • springboot報錯Invalid?bound?statement?(not?found)的解決

    springboot報錯Invalid?bound?statement?(not?found)的解決

    本文主要介紹了springboot報錯Invalid?bound?statement?(not?found)的解決,遇到這種問題通常是沒有配置好配置文件,下面就來具體介紹一下解決方法,感興趣的可以了解一下
    2025-03-03
  • Java中打jar包以及如何調(diào)用包方法演示

    Java中打jar包以及如何調(diào)用包方法演示

    這篇文章主要給大家介紹了關于Java中打jar包以及如何調(diào)用包的相關資料,jar包的全稱是java archive,jar包本質(zhì)就是一種壓縮包,在Java開發(fā)中一般是用來壓縮類的一個包,需要的朋友可以參考下
    2023-09-09
  • 淺談Java設置PPT幻燈片背景——純色、漸變、圖片背景

    淺談Java設置PPT幻燈片背景——純色、漸變、圖片背景

    這篇文章主要介紹了Java設置PPT幻燈片背景——純色、漸變、圖片背景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 解決Mybatis-plus找不到對應表及默認表名命名規(guī)則的問題

    解決Mybatis-plus找不到對應表及默認表名命名規(guī)則的問題

    這篇文章主要介紹了解決Mybatis-plus找不到對應表及默認表名命名規(guī)則的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 詳細介紹高性能Java緩存庫Caffeine

    詳細介紹高性能Java緩存庫Caffeine

    本篇文章主要介紹了詳細介紹高性能Java緩存庫Caffeine,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java 鍵盤輸入一個數(shù),輸出數(shù)組中指定元素的示例

    java 鍵盤輸入一個數(shù),輸出數(shù)組中指定元素的示例

    今天小編就為大家分享一篇java 鍵盤輸入一個數(shù),輸出數(shù)組中指定元素的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • List集合對象中按照不同屬性大小排序的實例

    List集合對象中按照不同屬性大小排序的實例

    下面小編就為大家?guī)硪黄狶ist集合對象中按照不同屬性大小排序的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Nacos下線服務時,下線報錯選舉Leader失敗問題以及解決

    Nacos下線服務時,下線報錯選舉Leader失敗問題以及解決

    這篇文章主要介紹了Nacos下線服務時,下線報錯選舉Leader失敗問題以及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

静宁县| 安国市| 淅川县| 湛江市| 旌德县| 北安市| 和政县| 布尔津县| 栾川县| 嘉兴市| 襄城县| 偏关县| 湟中县| 皮山县| 朝阳区| 土默特右旗| 南岸区| 大厂| 西宁市| 织金县| 凯里市| 潮安县| 盐亭县| 达孜县| 博乐市| 潢川县| 枣庄市| 四平市| 五寨县| 丽江市| 西乌珠穆沁旗| 大新县| 郯城县| 梨树县| 会泽县| 克什克腾旗| 子洲县| 乌兰察布市| 阳信县| 镇康县| 江孜县|