mybatis-pagehelper实现分页

孟鸿朗
2023-12-01

目录

第一种:

第二种:


第一种:

  我们在业务层实现分页,这样以便我们加一些自己的逻辑;首先,实体类都加上page(页码)、limit(每页数据)两个数据,  

1.首先定义一个实体类,加上属性为页码、每页数据量两种,然后我们控制器可以接收到前端传入的实体类参数(因为此时实体类中是有页码和数据数属性的),然后进行查询,根据查询条件我们可以得到对应每页的数据;所以说控制器中有两个方法:1.调用业务层中的查询方法;2.调用业务层中查询总数量(因为这里每页的数据量我们没有在后台写死,所以我们要通过总数量和页码来得到);

2.然后再在业务层中实现pagehelper.startPage()方法进行分页;

package com.yanzhen.utils;

import java.io.Serializable;

public class Entity implements Serializable {

    private Integer page;
    private Integer limit;

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Integer getLimit() {
        return limit;
    }

    public void setLimit(Integer limit) {
        this.limit = limit;
    }
}

然后我们其他需要分页的类extends这个类就可以了,这样的话比较方便

2.下一步我们配置maven依赖

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>

3.对service层进行修改,对subject课程信息进行分页处理:

*:PageHelper.startPage(subject.getPage(),subject.getLimit());//进行分页处理(偷偷再敲一次加深印象)

 public List<Subject> query(Subject subject) {
        //当查询条件有分页信息时,按照分页查询
        if(subject != null && subject.getPage() != null){
            //将subject进行分页处理,页码、每页的数据
            PageHelper.startPage(subject.getPage(),subject.getLimit());
        }
        //将subject转为map容器中,然后调用dao查询所有的课程
        return subjectDao.query(BeanMapUtils.beanToMap(subject));

    }

4.Controller接收前端响应json字符串,进行分页操作

@PostMapping("/query")
@ResponseBody
public Map<String,Object> query(@RequestBody Subject subject){
  List<Subject>list=subjectService.query(subject);//得到分页分好后的课程
  Integer count=subjectService.count(subject);//得到课程数量
   
  return MapControll.getInstance().success().page(list,count).getMap();//放入map容器中,返回给前端
}

第二种:

 1.首先我们导入依赖:

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

 2.在yml中对pagehelper进行配置:

pagehelper:
  helper-dialect: mysql
  reasonable: true #当页码小于1大于最大值时,显示第一页的数据
  support-methods-arguments: true

3.我们在controller中直接使用pagehelper.startPage()和PageInfo(利用它的构造函数初始化分页结果):当前端点击页数时,触动请求(并且将页码作为参数传给处理请求的方法),然后方法对此处理调用业务得到所有的用户,并且根据页码和每页数据进行分页;最后将pageinfo传入model中,返回给前端;

@GetMapping("/types")
public String types(@RequestParam(required = false,defaultValue = "1",value = "pagenum")int pagenum, Model model){

    PageHelper.startPage(pagenum, 5);  //pagenum:页数,pagesize:每页的信息数
    
    List<Type> allType = typeService.getAllType(); //调用业务层查询方法
    
    PageInfo<Type> pageInfo = new PageInfo<>(allType); //得到分页结果对象
    
    model.addAttribute("pageInfo", pageInfo);  //携带分页结果信息
    
    return "admin/types";  //回到前端展示页面
}

4.前端页面(这里用的thymeleaf):

<table  class="ui compact celled teal table">
  <thead>
  <tr>
    <th></th>
    <th>名称</th>
    <th>操作</th>
  </tr>
  </thead>
  <tbody>
  <tr th:each="type, iterStat : ${pageInfo.list}">
    <td th:text="${iterStat.count}">1</td>
    <td th:text="${type.name}">摸鱼方法</td>
    <td>
      <a href="#" th:href="@{/admin/types/{id}/input(id=${type.id})}" class="ui mini teal basic button">编辑</a>
      <a href="#" th:href="@{/admin/types/{id}/delete(id=${type.id})}" class="ui mini red basic button">删除</a>
    </td>
  </tr>
  </tbody>
  <tfoot>
  <tr>
    <th colspan="7">
      <div class="ui mini pagination menu"  >
        <div class="item"><a th:href="@{/admin/types}">首页</a></div>
        <div class="item"><a th:href="@{/admin/types(pagenum=${pageInfo.hasPreviousPage}?${pageInfo.prePage}:1)}">上一页</a></div>
        <div class="item"><a th:href="@{/admin/types(pagenum=${pageInfo.hasNextPage}?${pageInfo.nextPage}:${pageInfo.pages})}">下一页</a></div>
        <div class="item"><a th:href="@{/admin/types(pagenum=${pageInfo.pages})}">尾页</a></div>
      </div>
      <a href="#" th:href="@{/admin/types/input}" class="ui mini right floated teal basic button">新增</a>
    </th>
  </tr>
  </tfoot>
</table>

<div class="ui segment m-inline-block">
  <p >当前第<span th:text="${pageInfo.pageNum}"></span>页,总<span th:text="${pageInfo.pages}"></span>页,共<span th:text="${pageInfo.total}"></span>条记录</p>
</div>

 类似资料: