场景
SpringBoot中整合Mybatis时一般添加的依赖为
1 | org.mybatis.spring.bootmybatis-spring-boot-starter2.2.1 |
如果要实现分页查询的话,可以使用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、项目中添加依赖
1 | com.github.pagehelperpagehelper-spring-boot-starter1.3.0 |
添加这一个依赖就够了,不用再引入mybatis的依赖,因为会自动引入多个依赖
完整pom依赖
1 | org.springframework.bootspring-boot-starter-webcom.mysqlmysql-connector-jruntimeorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtestjunitjunitmysqlmysql-connector-javacom.github.pagehelperpagehelper-spring-boot-starter1.3.0 |
这里spring-boot-starter-web引入2.6.13,且存在循环引入,为避免循环依赖引用报错,添加如下配置
1 2 3 | spring: main: allow-circular-references: true |
2、按照官方文档说明配置PageHelper
yml中添加如下配置
1 2 3 4 5 6 7 8 9 10 11 | pagehelper: helperDialect: mysql # 指定数据库,不指定的话会默认自动检测数据库类型 # 是否启用分页合理化。 # 如果启用,当pagenumpages时,自动查询最后一页数据; # 不启用的,以上两种情况都会返回空数据 reasonable: true # 是否开启自动分页? 分页插件会从查询方法的参数值中,自动 params 配置的字段中取值,查找到合适的值时就会自动分页。 supportMethodsArguments: true # 默认值false, # 用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable, # 不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql; params: count=countSql |
3、yml中同样添加mybatis的配置
1 2 3 4 5 | 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、如何在代码中使用分页
官方文档给出了多种用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | //第一种,RowBounds方式的调用 List list = sqlSession.selectList( "x.y.selectIf" , null , new RowBounds( 0 , 10 )); //第二种,Mapper接口方式的调用,推荐这种使用方式。 PageHelper.startPage( 1 , 10 ); List list = userMapper.selectIf( 1 ); //第三种,Mapper接口方式的调用,推荐这种使用方式。 PageHelper.offsetPage( 1 , 10 ); List list = userMapper.selectIf( 1 ); //第四种,参数方法调用 //存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数 public interface CountryMapper { List selectByPageNumSize( @Param ( "user" ) User user, @Param ( "pageNum" ) int pageNum, @Param ( "pageSize" ) int pageSize); } //配置supportMethodsArguments=true //在代码中直接调用: List 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 selectByPageNumSize(User user); } //当 user 中的 pageNum!= null && pageSize!= null 时,会自动分页 List list = userMapper.selectByPageNumSize(user); //第六种,ISelect 接口方式 //jdk6,7用法,创建接口 Page page = PageHelper.startPage( 1 , 10 ).doSelectPage( new ISelect() { @Override public void doSelect() { userMapper.selectGroupBy(); } }); //jdk8 lambda用法 Page 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 静态方法调用
你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,
紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
1 2 3 4 5 | @Override public List selectUserPage() { PageHelper.startPage( 1 , 10 ); return userMapper.findAll(); } |
编写单元测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 users = userService.selectUserPage(); System.out.println(users.size()); } } |
单元测试运行结果
以上就是SpringBoot使用PageHelper插件实现Mybatis分页效果的详细内容,更多关于SpringBoot Mybatis分页的资料请关注IT俱乐部其它相关文章!