MyBatis-Plus 是 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,簡化開發、提高效率。其中,分頁查詢是日常開發中非常常見的需求。MyBatis-Plus 提供了多種分頁查詢的方法,本文將詳細介紹這些方法及其使用場景。
Page
對象進行分頁查詢Page
是 MyBatis-Plus 提供的一個分頁對象,通過它可以方便地進行分頁查詢。
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public void testPage() {
// 創建分頁對象,當前頁為1,每頁顯示10條
Page<User> page = new Page<>(1, 10);
// 創建查詢條件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getAge, 20);
// 執行分頁查詢
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
// 獲取分頁數據
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
long pages = userPage.getPages();
System.out.println("總記錄數:" + total);
System.out.println("總頁數:" + pages);
System.out.println("當前頁數據:" + userList);
}
Page<User>
是分頁對象,構造函數中的兩個參數分別是當前頁碼和每頁顯示的記錄數。QueryWrapper<User>
是查詢條件構造器,用于構建查詢條件。selectPage
方法用于執行分頁查詢,返回一個 IPage
對象,其中包含了分頁數據、總記錄數、總頁數等信息。PaginationInterceptor
進行分頁PaginationInterceptor
是 MyBatis-Plus 提供的一個分頁插件,通過配置該插件可以實現自動分頁。
PaginationInterceptor
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
配置好 PaginationInterceptor
后,在查詢時只需要傳入 Page
對象即可,MyBatis-Plus 會自動進行分頁。
public void testPaginationInterceptor() {
// 創建分頁對象,當前頁為1,每頁顯示10條
Page<User> page = new Page<>(1, 10);
// 執行分頁查詢
IPage<User> userPage = userMapper.selectPage(page, null);
// 獲取分頁數據
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
long pages = userPage.getPages();
System.out.println("總記錄數:" + total);
System.out.println("總頁數:" + pages);
System.out.println("當前頁數據:" + userList);
}
PaginationInterceptor
是 MyBatis-Plus 提供的分頁插件,配置后會自動攔截 SQL 語句并添加分頁邏輯。Page
對象即可,無需手動編寫分頁 SQL。PageHelper
進行分頁PageHelper
是一個常用的分頁插件,MyBatis-Plus 也支持與 PageHelper
集成使用。
PageHelper
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class PageHelperConfig {
@Bean
public PageHelper pageHelper() {
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
pageHelper.setProperties(properties);
return pageHelper;
}
}
PageHelper
進行分頁import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
public void testPageHelper() {
// 開始分頁,當前頁為1,每頁顯示10條
PageHelper.startPage(1, 10);
// 執行查詢
List<User> userList = userMapper.selectList(null);
// 獲取分頁信息
PageInfo<User> pageInfo = new PageInfo<>(userList);
System.out.println("總記錄數:" + pageInfo.getTotal());
System.out.println("總頁數:" + pageInfo.getPages());
System.out.println("當前頁數據:" + pageInfo.getList());
}
PageHelper
是一個獨立的分頁插件,MyBatis-Plus 也支持與其集成使用。PageHelper.startPage
方法用于開始分頁,傳入當前頁碼和每頁顯示的記錄數。PageInfo
是 PageHelper
提供的分頁信息對象,包含了分頁數據、總記錄數、總頁數等信息。LambdaQueryWrapper
進行分頁查詢LambdaQueryWrapper
是 MyBatis-Plus 提供的一個基于 Lambda 表達式的查詢條件構造器,可以簡化查詢條件的編寫。
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
public void testLambdaQueryWrapper() {
// 創建分頁對象,當前頁為1,每頁顯示10條
Page<User> page = new Page<>(1, 10);
// 創建查詢條件
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 20);
// 執行分頁查詢
IPage<User> userPage = userMapper.selectPage(page, lambdaQueryWrapper);
// 獲取分頁數據
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
long pages = userPage.getPages();
System.out.println("總記錄數:" + total);
System.out.println("總頁數:" + pages);
System.out.println("當前頁數據:" + userList);
}
LambdaQueryWrapper
是 MyBatis-Plus 提供的一個基于 Lambda 表達式的查詢條件構造器,可以簡化查詢條件的編寫。LambdaQueryWrapper
可以避免硬編碼字段名,提高代碼的可讀性和可維護性。Page
和 Wrapper
進行自定義分頁查詢在某些場景下,可能需要自定義分頁查詢邏輯,此時可以結合 Page
和 Wrapper
進行自定義分頁查詢。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
public void testCustomPage() {
// 創建分頁對象,當前頁為1,每頁顯示10條
Page<User> page = new Page<>(1, 10);
// 創建查詢條件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getAge, 20);
// 執行自定義分頁查詢
IPage<User> userPage = userMapper.selectCustomPage(page, queryWrapper);
// 獲取分頁數據
List<User> userList = userPage.getRecords();
long total = userPage.getTotal();
long pages = userPage.getPages();
System.out.println("總記錄數:" + total);
System.out.println("總頁數:" + pages);
System.out.println("當前頁數據:" + userList);
}
selectCustomPage
是一個自定義的分頁查詢方法,需要在 UserMapper
中定義。MyBatis-Plus 提供了多種分頁查詢的方法,開發者可以根據實際需求選擇合適的方式。無論是使用 Page
對象、PaginationInterceptor
插件,還是與 PageHelper
集成,MyBatis-Plus 都能滿足大多數分頁查詢的需求。對于復雜的業務場景,還可以結合 Wrapper
進行自定義分頁查詢,靈活性非常高。
通過本文的介紹,相信大家對 MyBatis-Plus 的分頁查詢方法有了更深入的了解,能夠在實際開發中靈活運用這些方法,提高開發效率。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。