SpringBoot使用PageHelper插件實(shí)現(xiàn)Mybatis分頁(yè)效果
場(chǎng)景
SpringBoot中整合Mybatis時(shí)一般添加的依賴為
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>如果要實(shí)現(xiàn)分頁(yè)查詢的話,可以使用Mybatis的分頁(yè)插件PageHelper
GitHub - pagehelper/Mybatis-PageHelper: Mybatis通用分頁(yè)插件
官方使用教程:
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

這里是SpringBoot項(xiàng)目,可直接使用pagehelper-spring-boot-starter
GitHub - pagehelper/pagehelper-spring-boot: pagehelper-spring-boot
PageHelper-Spring-Boot-Starter 幫助你集成分頁(yè)插件到 Spring Boot
實(shí)現(xiàn)
1、項(xiàng)目中添加依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>添加這一個(gè)依賴就夠了,不用再引入mybatis的依賴,因?yàn)闀?huì)自動(dòng)引入多個(gè)依賴

完整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驅(qū)動(dòng)-->
<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)依賴引用報(bào)錯(cuò),添加如下配置
spring:
main:
allow-circular-references: true2、按照官方文檔說(shuō)明配置PageHelper

yml中添加如下配置
pagehelper: helperDialect: mysql # 指定數(shù)據(jù)庫(kù),不指定的話會(huì)默認(rèn)自動(dòng)檢測(cè)數(shù)據(jù)庫(kù)類型 # 是否啟用分頁(yè)合理化。 # 如果啟用,當(dāng)pagenum<1時(shí),會(huì)自動(dòng)查詢第一頁(yè)的數(shù)據(jù),當(dāng)pagenum>pages時(shí),自動(dòng)查詢最后一頁(yè)數(shù)據(jù); # 不啟用的,以上兩種情況都會(huì)返回空數(shù)據(jù) reasonable: true # 是否開(kāi)啟自動(dòng)分頁(yè)? 分頁(yè)插件會(huì)從查詢方法的參數(shù)值中,自動(dòng) params 配置的字段中取值,查找到合適的值時(shí)就會(huì)自動(dòng)分頁(yè)。 supportMethodsArguments: true # 默認(rèn)值false, # 用于從對(duì)象中根據(jù)屬性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable, # 不配置映射的用默認(rèn)值, 默認(rèn)值為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 # 實(shí)體類所在的位置
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #用于控制臺(tái)打印sql語(yǔ)句4、如何在代碼中使用分頁(yè)
官方文檔給出了多種用法
//第一種,RowBounds方式的調(diào)用
List<User> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));
//第二種,Mapper接口方式的調(diào)用,推薦這種使用方式。
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectIf(1);
//第三種,Mapper接口方式的調(diào)用,推薦這種使用方式。
PageHelper.offsetPage(1, 10);
List<User> list = userMapper.selectIf(1);
//第四種,參數(shù)方法調(diào)用
//存在以下 Mapper 接口方法,你不需要在 xml 處理后兩個(gè)參數(shù)
public interface CountryMapper {
List<User> selectByPageNumSize(
@Param("user") User user,
@Param("pageNum") int pageNum,
@Param("pageSize") int pageSize);
}
//配置supportMethodsArguments=true
//在代碼中直接調(diào)用:
List<User> list = userMapper.selectByPageNumSize(user, 1, 10);
//第五種,參數(shù)對(duì)象
//如果 pageNum 和 pageSize 存在于 User 對(duì)象中,只要參數(shù)有值,也會(huì)被分頁(yè)
//有如下 User 對(duì)象
public class User {
//其他fields
//下面兩個(gè)參數(shù)名和 params 配置的名字一致
private Integer pageNum;
private Integer pageSize;
}
//存在以下 Mapper 接口方法,你不需要在 xml 處理后兩個(gè)參數(shù)
public interface CountryMapper {
List<User> selectByPageNumSize(User user);
}
//當(dāng) user 中的 pageNum!= null && pageSize!= null 時(shí),會(huì)自動(dòng)分頁(yè)
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();
}
});
//對(duì)應(yīng)的lambda用法
pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> userMapper.selectGroupBy());
//count查詢,返回一個(gè)查詢語(yǔ)句的count數(shù)
long total = PageHelper.count(new ISelect() {
@Override
public void doSelect() {
userMapper.selectLike(user);
}
});
//lambda
total=PageHelper.count(()->userMapper.selectLike(user));下面介紹簡(jiǎn)單的PageHelper.startPage 靜態(tài)方法調(diào)用
你需要進(jìn)行分頁(yè)的 MyBatis 查詢方法前調(diào)用 PageHelper.startPage 靜態(tài)方法即可,
緊跟在這個(gè)方法后的第一個(gè)MyBatis 查詢方法會(huì)被進(jìn)行分頁(yè)。
@Override
public List<User> selectUserPage() {
PageHelper.startPage(1, 10);
return userMapper.findAll();
}編寫單元測(cè)試
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());
}
}單元測(cè)試運(yùn)行結(jié)果

以上就是SpringBoot使用PageHelper插件實(shí)現(xiàn)Mybatis分頁(yè)效果的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Mybatis分頁(yè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java selenium 常見(jiàn)web UI 元素操作及API使用
本文主要介紹java selenium 常見(jiàn)web UI 元素操作,這里幫大家整理了相關(guān)資料并附示例代碼,有需要的小伙伴可以參考下2016-08-08
java使用jacob.jar將word轉(zhuǎn)pdf
這篇文章主要為大家詳細(xì)介紹了java利用jacob.jar將word轉(zhuǎn)pdf,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
SpringBoot整合GitLab-CI實(shí)現(xiàn)持續(xù)集成的過(guò)程
這篇文章主要介紹了SpringBoot整合GitLab-CI實(shí)現(xiàn)持續(xù)集成,本文詳細(xì)講述了 GitLab-CI 持續(xù)集成的安裝、部署、以及配置,需要的朋友可以參考下2022-12-12
LoggingEventAsyncDisruptorAppender類執(zhí)行流程源碼解讀
這篇文章主要介紹了LoggingEventAsyncDisruptorAppender類執(zhí)行流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Java8中Stream流求最大值最小值的實(shí)現(xiàn)示例
本文主要介紹了Java8中Stream流求最大值最小值的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
springboot2.3.1替換為其他的嵌入式servlet容器的詳細(xì)方法
這篇文章主要介紹了springboot2.3.1替換為其他的嵌入式servlet容器的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

