【MyBatis框架】MyBatis實現物理分頁和邏輯(記憶體)分頁
實現查詢分頁有兩種思路,一種是在SQL語句中直接完成分頁,查詢出來後直接使用,例如在SQL語句中使用LIMIT關鍵字;另外一種是SQL語句只做查詢,其他諸如分頁、數值處理的操作都由程式語言來完成,在MyBatis中就採用了這種方法。
下面來介紹兩種MyBatis中支援的分頁方法:
方式1:使用RowBounds物件實現邏輯分頁
Mybatis使用RowBounds物件進行分頁,它是針對ResultSet結果集執行的記憶體分頁,而非物理分頁。
使用方式就是在調取sql語句的時候,加上RowBounds物件來指定分頁開始的位置和要顯示的條數。
//調取sql語句,selectList("方法的完整路徑"),路徑=namespace+id
List<Student> list = session.selectList("com.maven.dao.StudentDao.getall",null,new RowBounds(0,3));// rowBounds(開始位置,顯示條數)
方式2:使用.pageHelper分頁外掛
分頁外掛的基本原理是使用Mybatis提供的外掛介面,實現自定義外掛,在外掛的攔截方法內攔截待執行的sql,然後重寫sql,根據dialect方言,新增對應的物理分頁語句和物理分頁引數。
步驟一:匯入jar包
分頁外掛:pagehelper.jar
sql 解析工具:jsqlparser.jar
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
步驟二、在mybatis.xml配置檔案中配置外掛
外掛5.1之前:
<plugins>
<!-- PageHelper4.1.6 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
外掛5.1之後:interceptor不同,並且不需要指定資料庫名字
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
步驟三、在執行查詢之前指定分頁的引數
PageHelper.startPage(當前頁,每頁條數)
還可以將返回的list結果封裝在PageInfo物件裡,通過使用該物件實現對總條數、總頁數、上一頁、下一頁、當前頁、每頁顯示條數、當前頁顯示條數的查詢,詳見下文。
例如
//1.載入配置檔案
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//2.建立SqlSessionFactoryBuilder物件
SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();
//3.得到session工廠
SqlSessionFactory factory = builder.build(reader,"development2");
//4.得到SqlSession物件
SqlSession session = factory.openSession();
//5.調取sql語句,selectList("方法的完整路徑"),路徑=namespace+id
//5.1 指定分頁的引數
PageHelper.startPage(2,3);
//5.2 調取Dao層方法
List<Student> list = session.selectList("com.maven.dao.StudentDao.getall");
//5.3 建立分頁工具類物件
PageInfo<Student> info = new PageInfo<>(list);
//6.遍歷
for (Student student:info.getList()) {
System.out.println(student);
}
System.out.println("總條數:"+info.getTotal());
System.out.println("總頁數:"+info.getPages());
System.out.println("上一頁:"+info.getPrePage());
//如果沒有下一頁, 則返回0
System.out.println("下一頁:"+info.getNextPage());
System.out.println("當前頁:"+info.getPageNum());
System.out.println("每頁顯示條數:"+info.getPageSize());
System.out.println("當前頁的條數:"+info.getSize());
//7.關閉資料來源
session.close();
reader.close();
邏輯分頁和物理分頁相比的優缺點
-
物理分頁每次都要訪問資料庫,邏輯分頁只訪問一次
-
物理分頁佔用記憶體少,邏輯分頁相對較多
-
物理分頁資料每次都是最新的,邏輯分頁有可能滯後
下篇介紹一下快取
相關文章
- 【mybatis-plus】分頁、邏輯刪除MyBatis
- Mybatis分頁實現流程MyBatis
- Spring專案處理分頁(邏輯和物理分頁)Spring
- MyBatis實現分頁的方式MyBatis
- MyBatis 3 分頁MyBatis
- Mybatis 分頁:Pagehelper + 攔截器實現MyBatis
- Mybatis分頁之RowBoundsMyBatis
- SpringBoot 整合Mybatis + PageHelper 實現分頁Spring BootMyBatis
- Mybatis分頁和Spring的整合MyBatisSpring
- myBatis分頁外掛配置MyBatis
- Mybatis筆記03---ResultMap及分頁MyBatis筆記
- mybatis動態sql與分頁MyBatisSQL
- 深入淺出Mybatis-分頁MyBatis
- Mybatis-分頁攔截器MyBatis
- mybatis plus 新增分頁外掛MyBatis
- Windows記憶體管理-分頁Windows記憶體
- Mybatis學習-日誌與分頁MyBatis
- Mybatis原始碼分析(七)自定義快取、分頁的實現MyBatis原始碼快取
- 使用mybatis分頁外掛展示首頁最新視訊MyBatis
- mybatis generator外掛系列--分頁外掛MyBatis
- mybatis的三發外掛:分頁pagehelpMyBatis
- 【YashanDB資料庫】Mybatis-plus分頁框架識別不到Yashandb資料庫MyBatis框架
- Linux的記憶體分頁管理Linux記憶體
- Linux 的記憶體分頁管理Linux記憶體
- Tp框架實現好看分頁效果框架
- 【深入淺出MyBatis系列七】分頁外掛MyBatis
- 面試題——Mybatis是如何進行分頁的面試題MyBatis
- Mybatis分頁外掛只顯示第一頁的問題MyBatis
- SSM框架實現分頁查詢例子SSM框架
- element ui 分頁記憶checkedUI
- Spring boot方式使用MyBatis-Plus分頁操作Spring BootMyBatis
- Mybatis封裝分頁查詢的java公用類MyBatis封裝Java
- 手把手教你開發 MyBatis 分頁外掛MyBatis
- elementUI實現分頁UI
- 分頁的實現
- MyBatis-Plus之邏輯刪除的實現MyBatis
- Mybatis第三方PageHelper分頁外掛原理MyBatis
- 80386分頁機制與虛擬記憶體記憶體