深入了解MyBatis分頁機(jī)制
MyBatis分頁原理
在講解mybatis的分頁原理之前,我們先來看一下:內(nèi)存分頁 vs. 數(shù)據(jù)庫分頁
- 內(nèi)存分頁:查詢數(shù)據(jù)庫獲取全部數(shù)據(jù),然后在內(nèi)存中進(jìn)行分頁。這種方式簡單但效率低下,當(dāng)數(shù)據(jù)量巨大時(shí)可能導(dǎo)致內(nèi)存溢出。
- 數(shù)據(jù)庫分頁:利用數(shù)據(jù)庫的分頁功能(比如 MySQL 的 LIMIT 和 OFFSET),僅查詢當(dāng)前頁的數(shù)據(jù)。這種方式效率高,但需要編寫特定的 SQL。
現(xiàn)在我們?cè)倬唧w講MyBatis 的分頁方式。
MyBatis 支持兩種分頁方式:物理分頁和內(nèi)存分頁。但是在實(shí)際應(yīng)用中,博主比較推薦使用物理分頁。
- 物理分頁:通過特定的 SQL 實(shí)現(xiàn),依賴數(shù)據(jù)庫的分頁功能。
- 內(nèi)存分頁:雖然 MyBatis 支持,但不推薦在大數(shù)據(jù)量場(chǎng)景下使用。
MyBatis 分頁插件
為了實(shí)現(xiàn)物理分頁,MyBatis 提供了分頁插件,如 PageHelper。這些插件可以自動(dòng)修改原始 SQL,添加分頁相關(guān)的語句。
如何使用 MyBatis 分頁插件
接下來我們講解一下如何使用 MyBatis 分頁插件 。
首先第一步肯定是引入依賴
先創(chuàng)建一個(gè) Maven 項(xiàng)目,引入 PageHelper 依賴:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
然后配置 PageHelper
在 MyBatis 的配置文件(如 mybatis-config.xml)中,添加插件配置:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="dialect" value="mysql"/> <!-- 根據(jù)實(shí)際數(shù)據(jù)庫選擇方言 -->
<property name="reasonable" value="true"/> <!-- 支持接口參數(shù)中的 pageNum 和 pageSize 為 0 時(shí)使用默認(rèn)值 -->
<property name="supportMethodsArguments" value="true"/> <!-- 支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù) -->
<property name="params" value="count(countSql)"/> <!-- count 查詢的 SQL 參數(shù) -->
</plugin>
</plugins>
最后使用 PageHelper
在 Mapper 接口或 Service 層使用 PageHelper:
// 在查詢之前設(shè)置分頁參數(shù) PageHelper.startPage(pageNum, pageSize); List<User> users = userMapper.selectByExample(example); // 使用 PageInfo 包裝查詢結(jié)果,獲取分頁信息 PageInfo<User> pageInfo = new PageInfo<>(users, pageSize);
以博主之前做過的課設(shè)項(xiàng)目為例:
我們手上現(xiàn)在有一個(gè)UserMapper接口,用來查詢用戶數(shù)據(jù):
public interface UserMapper {
List<User> selectAllUsers();
}
在Service層或Controller層中,我們這時(shí)候可以使用PageHelper來實(shí)現(xiàn)分頁:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public PageInfo<User> getUsers(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize); // 啟動(dòng)分頁
List<User> users = userMapper.selectAllUsers(); // 查詢用戶數(shù)據(jù)
return new PageInfo<>(users); // 使用PageInfo包裝查詢結(jié)果,獲取分頁信息
}
}
當(dāng)調(diào)用getUsers方法時(shí),PageHelper會(huì)自動(dòng)為selectAllUsers方法中的SQL添加分頁語句,從而只查詢當(dāng)前頁的數(shù)據(jù)。
前端可以根據(jù)返回的PageInfo對(duì)象獲取當(dāng)前頁的數(shù)據(jù)、總頁數(shù)、總記錄數(shù)等信息,并進(jìn)行相應(yīng)的展示。
文章到這里就先結(jié)束了,后續(xù)會(huì)繼續(xù)分享相關(guān)的知識(shí)點(diǎn)。
以上就是深入了解MyBatis分頁機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于MyBatis分頁機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例
這篇文章主要介紹了Spring Boot攔截器實(shí)現(xiàn)步驟及測(cè)試實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
java8 集合 多字段 分組 統(tǒng)計(jì)個(gè)數(shù)代碼
這篇文章主要介紹了java8 集合 多字段 分組 統(tǒng)計(jì)個(gè)數(shù)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Logback日志基礎(chǔ)及自定義配置代碼實(shí)例
這篇文章主要介紹了Logback日志基礎(chǔ)及自定義配置代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Spring?Security?登錄時(shí)添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例
這篇文章主要為大家介紹了Spring?Security?登錄時(shí)添加圖形驗(yàn)證碼實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式
這篇文章主要介紹了Jpa數(shù)據(jù)操作以及@Query和@Modifying注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Java 兩種延時(shí)thread和timer詳解及實(shí)例代碼
這篇文章主要介紹了Java 兩種延時(shí)thread和timer詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02

