一招学会—Spring Boot使用PageHelper进行分页

简介: 一招学会—Spring Boot使用PageHelper进行分页

@[toc]


一、简介:

pagehelper 分页插件,pagehelper 是一个强大实用的 MyBatis 分页插件,可以帮助我们快速的实现MyBatis分页功能,而且pagehelper有个优点是,分页和Mapper.xml完全解耦,并以插件的形式实现,对Mybatis执行的流程进行了强化,这有效的避免了我们需要直接写分页SQL语句来实现分页功能。在Dao层并不需要写分页SQL,分页插件会拦截查询请求,并读取前台传来的分页查询参数重新生成分页查询语句。

二、案例代码

1、pom.xml

首先,我们需要在 pom.xml 文件中添加分页插件依赖包。

<!-- pagehelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

2、application.properties

然后在 application.properties配置文件中添加分页插件有关的配置。

#分页助手
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql

3、WordSelectController.java

在控制器SysUserController中添加分页查询方法,并调用服务层的分页查询方法。

    //分页查询
    @RequestMapping(value = "/findPage")
    public Object findPage(@RequestBody Map<String,Object> map) {
        //起始索引:
        Integer pageNum = Integer.parseInt(params.get("pageNum").toString());
        //查询的条数
        Integer pageSize = Integer.parseInt(params.get("pageSize").toString());
        //调用server层进行分页查询
        return findPageResult = wordSelectService.findPage(pageNum, pageSize);
    }

4、WordSelectServiceImpl.java

服务层通过调用DAO层代码完成分页查询,这里统一封装分页查询的请求和结果类;

@Override
    public PageResult findPage(int pageNum,int pageSize) {
//        1、分页从数据库中查询
        PageHelper.startPage(pageNum, pageSize);
        List<English> sysMenus = englishDao.selectPage();
        logger.info("查询数据库的返回值为====="+sysMenus.toString());
//        2、对返回值进行判断
        if (sysMenus.size()==0){
            return null;
        }
//        3、对查询的结果进行封装
        PageInfo<English> englishPageInfo = new PageInfo<>(sysMenus);
        PageResult pageResult = PageUtils.getPageResult(englishPageInfo);

        return pageResult;
    }

5、EnglishDao

在 Dao 层添加一个分页查找方法;

//    分页查询
    List<English> selectPage( );

6、EnglishDao.xml

然后在 SysUserMapper.xml 中加入selectPage的实现,这是一个普通的查找全部记录的查询语句,并不需要写分页SQL,分页插件会拦截查询请求,并读取前台传来的分页查询参数重新生成分页查询语句。

  <!--分页查询-->
  <select id="selectPage" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from english
  </select>

7、PageUtils.java

分页查询请求封装类;

import com.github.pagehelper.PageInfo;
import com.lydms.pojo.PageResult;

public class PageUtils {
     //将分页信息封装到统一的接口
    public static PageResult getPageResult(PageInfo<?> pageInfo) {
        PageResult pageResult = new PageResult();
        pageResult.setPageNum(pageInfo.getPageNum());
        pageResult.setPageSize(pageInfo.getPageSize());
        pageResult.setTotalSize(pageInfo.getTotal());
        pageResult.setTotalPages(pageInfo.getPages());
        pageResult.setContent(pageInfo.getList());
        return pageResult;
    }
}

8、PageResult.java

分页查询结果封装类。

public class PageResult {
    /**
     * 当前页码
     */
    private int pageNum;
    /**
     * 每页数量
     */
    private int pageSize;
    /**
     * 记录总数
     */
    private long totalSize;
    /**
     * 页码总数
     */
    private int totalPages;
    /**
     * 数据模型
     */
    private List<?> content;
    public int getPageNum() {
        return pageNum;
    }
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public long getTotalSize() {
        return totalSize;
    }
    public void setTotalSize(long totalSize) {
        this.totalSize = totalSize;
    }
    public int getTotalPages() {
        return totalPages;
    }
    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
    public List<?> getContent() {
        return content;
    }
    public void setContent(List<?> content) {
        this.content = content;
    }
}

三、postman调用测试

postman调用的参数

http://localhost:80/select/findPage
{
"pageNum":"2",
"pageSize":"2"
}

postman返回值:

{
    "status": 200,
    "errmsg": "成功",
    "data": {
        "pageNum": 2,
        "pageSize": 2,
        "totalSize": 102,
        "totalPages": 51,
        "content": [
            {
                "englishid": 3,
                "english": "request",
                "chinese": "请求",
                "remark": ""
            },
            {
                "englishid": 4,
                "english": "apple",
                "chinese": "苹果",
                "remark": ""
            }
        ]
    }
}
目录
相关文章
|
Java 数据库连接 Spring
Spring与Mybatis整合&&aop整合pageHelper分页插件2
Spring与Mybatis整合&&aop整合pageHelper分页插件2
71 0
|
Java 数据库连接 Maven
Spring与Mybatis整合&&aop整合pageHelper分页插件1
Spring与Mybatis整合&&aop整合pageHelper分页插件1
96 0
|
3月前
|
Java Spring 开发框架
Spring Boot中的分页与排序实现
Spring Boot中的分页与排序实现
|
Java 数据库连接 数据库
Spring 与【MyBatis 】和【 pageHelper分页插件 】整合
Spring 与【MyBatis 】和【 pageHelper分页插件 】整合
118 0
|
4月前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
110 0
|
5月前
|
Java Spring
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
Spring Boot利用Spring Data JPA实现排序与分页查询实战(附源码,超详细)
175 0
|
5月前
|
SQL 前端开发 JavaScript
Spring Boot + Thymeleaf 使用PageHelper实现分页
Spring Boot + Thymeleaf 使用PageHelper实现分页
|
11月前
|
XML Java 数据库连接
Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍
Spring集成【MyBatis】和【PageHelper分页插件】整合---详细介绍
70 0
|
12月前
|
缓存 Java Spring
缓存 - Spring Boot 整合 Caffeine 不完全指北
缓存 - Spring Boot 整合 Caffeine 不完全指北
366 0
|
Java 关系型数据库 MySQL
SpringBoot + thymeleaf 实现分页
用SpringBoot + thymeleaf可以 实现分页 。
897 0
SpringBoot + thymeleaf 实现分页