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

