SpringBoot使用PageHelper插件實現Mybatis分頁效果
場景
SpringBoot中整合Mybatis時一般添加的依賴為
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.1</version> </dependency>
如果要實現分頁查詢的話,可以使用Mybatis的分頁插件PageHelper
GitHub - pagehelper/Mybatis-PageHelper: Mybatis通用分頁插件
官方使用教程:
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
這里是SpringBoot項目,可直接使用pagehelper-spring-boot-starter
GitHub - pagehelper/pagehelper-spring-boot: pagehelper-spring-boot
PageHelper-Spring-Boot-Starter 幫助你集成分頁插件到 Spring Boot
實現
1、項目中添加依賴
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
添加這一個依賴就夠了,不用再引入mybatis的依賴,因為會自動引入多個依賴
完整pom依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <!--MySQL驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
這里spring-boot-starter-web引入2.6.13,且存在循環(huán)引入,為避免循環(huán)依賴引用報錯,添加如下配置
spring: main: allow-circular-references: true
2、按照官方文檔說明配置PageHelper
yml中添加如下配置
pagehelper: helperDialect: mysql # 指定數據庫,不指定的話會默認自動檢測數據庫類型 # 是否啟用分頁合理化。 # 如果啟用,當pagenum<1時,會自動查詢第一頁的數據,當pagenum>pages時,自動查詢最后一頁數據; # 不啟用的,以上兩種情況都會返回空數據 reasonable: true # 是否開啟自動分頁? 分頁插件會從查詢方法的參數值中,自動 params 配置的字段中取值,查找到合適的值時就會自動分頁。 supportMethodsArguments: true # 默認值false, # 用于從對象中根據屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable, # 不配置映射的用默認值, 默認值為pageNum=pageNum;pageSize=pageSize;count=countSql; params: count=countSql
3、yml中同樣添加mybatis的配置
mybatis: mapper-locations: classpath:mapper/*.xml # mapper映射文件位置 type-aliases-package: com.badao.demo.entity # 實體類所在的位置 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #用于控制臺打印sql語句
4、如何在代碼中使用分頁
官方文檔給出了多種用法
//第一種,RowBounds方式的調用 List<User> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10)); //第二種,Mapper接口方式的調用,推薦這種使用方式。 PageHelper.startPage(1, 10); List<User> list = userMapper.selectIf(1); //第三種,Mapper接口方式的調用,推薦這種使用方式。 PageHelper.offsetPage(1, 10); List<User> list = userMapper.selectIf(1); //第四種,參數方法調用 //存在以下 Mapper 接口方法,你不需要在 xml 處理后兩個參數 public interface CountryMapper { List<User> selectByPageNumSize( @Param("user") User user, @Param("pageNum") int pageNum, @Param("pageSize") int pageSize); } //配置supportMethodsArguments=true //在代碼中直接調用: List<User> list = userMapper.selectByPageNumSize(user, 1, 10); //第五種,參數對象 //如果 pageNum 和 pageSize 存在于 User 對象中,只要參數有值,也會被分頁 //有如下 User 對象 public class User { //其他fields //下面兩個參數名和 params 配置的名字一致 private Integer pageNum; private Integer pageSize; } //存在以下 Mapper 接口方法,你不需要在 xml 處理后兩個參數 public interface CountryMapper { List<User> selectByPageNumSize(User user); } //當 user 中的 pageNum!= null && pageSize!= null 時,會自動分頁 List<User> list = userMapper.selectByPageNumSize(user); //第六種,ISelect 接口方式 //jdk6,7用法,創(chuàng)建接口 Page<User> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() { @Override public void doSelect() { userMapper.selectGroupBy(); } }); //jdk8 lambda用法 Page<User> page = PageHelper.startPage(1, 10).doSelectPage(()-> userMapper.selectGroupBy()); //也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() { @Override public void doSelect() { userMapper.selectGroupBy(); } }); //對應的lambda用法 pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> userMapper.selectGroupBy()); //count查詢,返回一個查詢語句的count數 long total = PageHelper.count(new ISelect() { @Override public void doSelect() { userMapper.selectLike(user); } }); //lambda total=PageHelper.count(()->userMapper.selectLike(user));
下面介紹簡單的PageHelper.startPage 靜態(tài)方法調用
你需要進行分頁的 MyBatis 查詢方法前調用 PageHelper.startPage 靜態(tài)方法即可,
緊跟在這個方法后的第一個MyBatis 查詢方法會被進行分頁。
@Override public List<User> selectUserPage() { PageHelper.startPage(1, 10); return userMapper.findAll(); }
編寫單元測試
import com.badao.demo.entity.User; import com.badao.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @SpringBootTest @RunWith(SpringRunner.class) public class PageTest { @Autowired private UserService userService; @Test public void testPage() { List<User> users = userService.selectUserPage(); System.out.println(users.size()); } }
單元測試運行結果
以上就是SpringBoot使用PageHelper插件實現Mybatis分頁效果的詳細內容,更多關于SpringBoot Mybatis分頁的資料請關注腳本之家其它相關文章!
相關文章
java selenium 常見web UI 元素操作及API使用
本文主要介紹java selenium 常見web UI 元素操作,這里幫大家整理了相關資料并附示例代碼,有需要的小伙伴可以參考下2016-08-08SpringBoot整合GitLab-CI實現持續(xù)集成的過程
這篇文章主要介紹了SpringBoot整合GitLab-CI實現持續(xù)集成,本文詳細講述了 GitLab-CI 持續(xù)集成的安裝、部署、以及配置,需要的朋友可以參考下2022-12-12LoggingEventAsyncDisruptorAppender類執(zhí)行流程源碼解讀
這篇文章主要介紹了LoggingEventAsyncDisruptorAppender類執(zhí)行流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12springboot2.3.1替換為其他的嵌入式servlet容器的詳細方法
這篇文章主要介紹了springboot2.3.1替換為其他的嵌入式servlet容器的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07