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

2023-08-09 20:37:40 浏览数 (1)

一、简介:

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

二、案例代码

1、pom.xml

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

代码语言:javascript复制
<!-- pagehelper -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>
2、application.properties

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

代码语言:javascript复制
#分页助手
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
3、WordSelectController.java

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

代码语言:javascript复制
    //分页查询
    @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层代码完成分页查询,这里统一封装分页查询的请求和结果类;

代码语言:javascript复制
@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 层添加一个分页查找方法;

代码语言:javascript复制
//    分页查询
    List<English> selectPage( );
6、EnglishDao.xml

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

代码语言:javascript复制
  <!--分页查询-->
  <select id="selectPage" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from english
  </select>
7、PageUtils.java

分页查询请求封装类;

代码语言:javascript复制
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

分页查询结果封装类。

代码语言:javascript复制
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调用的参数
代码语言:javascript复制
http://localhost:80/select/findPage
{
"pageNum":"2",
"pageSize":"2"
}
postman返回值:
代码语言:javascript复制
{
    "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": ""
            }
        ]
    }
}

0 人点赞