IT俱乐部 Java SpringBoot使用PageHelper插件实现Mybatis分页效果

SpringBoot使用PageHelper插件实现Mybatis分页效果

场景

SpringBoot中整合Mybatis时一般添加的依赖为

        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、项目中添加依赖

        com.github.pagehelperpagehelper-spring-boot-starter1.3.0

添加这一个依赖就够了,不用再引入mybatis的依赖,因为会自动引入多个依赖

完整pom依赖

        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,且存在循环引入,为避免循环依赖引用报错,添加如下配置

spring:
  main:
    allow-circular-references: true

2、按照官方文档说明配置PageHelper

yml中添加如下配置

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的配置

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 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 查询方法会被进行分页。

    @Override
    public List 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 users = userService.selectUserPage();
        System.out.println(users.size());
    }
 
}

单元测试运行结果

以上就是SpringBoot使用PageHelper插件实现Mybatis分页效果的详细内容,更多关于SpringBoot Mybatis分页的资料请关注IT俱乐部其它相关文章!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/java/9651.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部