小書MybatisPlus第4篇-表格分頁與下拉分頁查詢

字母哥部落格發表於2020-07-15

本文為mybatis系列文件的第4篇,前三篇請訪問下面的網址。

一、讓Spring Boot-MybatisPlus支援分頁

在已經整合了Mybatis Plus的Spring專案中加入如下分頁攔截器的配置,讓MybatisPlus支援分頁

@Configuration
public class MybatisPlusConfiguration {
    //配置分頁攔截器
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

二、單表查詢分頁-表格分頁

@Test
public void testSelect() {
  LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
  query.ge(User::getAge,10)      //查詢條件:年齡大於10
       .orderByDesc(User::getAge);   //按照年齡的倒序排序

  Page<User> page = new Page<> (1,10);   //查詢第1頁,每頁10條資料
  userMapper.selectPage(page,query);   //page分頁資訊,query查詢條件

  System.out.println("總頁數:"+ page.getPages());
  System.out.println("總記錄數:"+ page.getTotal());

  // 分頁返回的物件與傳入的物件是同一個
  List<User> list = page.getRecords();
  list.forEach(System.out::println);
}

查詢輸出結果如下:

總頁數:1
總記錄數:6
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=1280261858003038209, name=字母哥, age=18, email=null)

在分頁查詢過程中,一共執行了兩條SQL

# 第一條SQL用於查詢在query條件下的總條數
SELECT COUNT(1) FROM user WHERE age >= ? 

# 第二條SQL用於查詢具體的資料
SELECT id,name,age,email 
FROM user 
WHERE age >= ? 
ORDER BY age DESC 
LIMIT ?,? 

這種分頁方式比較適合於傳統應用中,表格分頁的開發。需要給出總條數,以及每頁多少條。
表格分頁查詢

三、不查詢總記錄數的分頁-下拉分頁

在一些現代的網際網路資訊網站,或者應用app。通常不會給出資料的總條數,而是通過滑鼠或者手勢,每次下拉都載入n條資料。

下拉分頁

這種情況下的分頁通常就不需要查詢總條數了,如果查詢總條數浪費資料庫的計算資源,使響應時間變長。所以我們應該只做分頁資料查詢,不查詢總條數。設定page分頁的第三個引數為false。

下拉分頁查詢

輸出結果總頁數和總條數都是0,但是分頁資料正常查詢回來了。

總頁數:0
總記錄數:0
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=1280261858003038209, name=字母哥, age=18, email=null)

只執行了這樣一個SQL

ELECT id,name,age,email 
FROM user 
WHERE age >= ? 
ORDER BY age DESC 
LIMIT ?,? 

歡迎關注我的部落格,裡面有很多精品合集

  • 本文轉載註明出處(必須帶連線,不能只轉文字):字母哥部落格

覺得對您有幫助的話,幫我點贊、分享!您的支援是我不竭的創作動力! 。另外,筆者最近一段時間輸出瞭如下的精品內容,期待您的關注。

相關文章