MyBatis 分页插件 PageHelper 简单使用流程

分页插件 PageHelper 的相关文档

github:

https://github.com/pagehelper/Mybatis-PageHelper

码云:

https://gitee.com/free/Mybatis_PageHelper

官网:

https://pagehelper.github.io/

1、添加 pom.xml 依赖

在版本信息地方,可以填写最新版本

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

2、在 MyBatis.xml 中配置拦截器插件

<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
      <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
            <property name="helperDialect" value="mysql"/>
            <!-- 如果需要配置参数,参照文档配置 -->
  </plugin>
</plugins>

3、使用 PageInfo 方式封装分页信息

//从第一页开始查询,连续查10条数据,默认查询总数count,startPage紧跟着的第一个select方法会被分页
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装,其中参数5是页码导航连续显示的页数
PageInfo page = new PageInfo(list, 5);

4、PageInfo 中的分页属性

pageNum当前页

pageSize每页的数量

size当前页的数量

orderBy排序

startRow当前页面第一个元素在数据库中的行号

endRow当前页面最后一个元素在数据库中的行号

total总记录数(在这里也就是查询到的用户总数)

pages总页数 (这个页数也很好算,每页5条,总共有11条,需要3页才可以显示完)

list结果集

prePage前一页

nextPage下一页

isFirstPage是否为第一页

isLastPage是否为最后一页

hasPreviousPage是否有前一页

hasNextPage是否有下一页

navigatePages导航页码数

navigatepageNums所有导航页号

navigateFirstPage导航第一页

navigateLastPage导航最后一页

firstPage第一页

lastPage最后一页

5、包装数据,方便浏览器解析

Msg(这个适合分页插件无关的,主要是对于cotroller返回数据,进行包装,更方便浏览器解析)

public class Msg {
    //表示状态码
    private int code;
    //提示信息
    private String msg;
    //要返回给浏览器的数据
    private Map<String,Object> extend = new HashMap<String,Object>();

    //在controller中调用success方法,返回Msg对象
    public static Msg success(){
        Msg result = new Msg();
        result.setCode(100);
        result.setMsg("处理成功!");
        return result;
    }
    public static Msg fail(){
        Msg result = new Msg();
        result.setCode(200);
        result.setMsg("处理失败");
        return result;
    }

    //把pageInfo中的数据保存到Msg中,一并返回
    public Msg add(String key,Object value){
        this.getExtend().put(key, value);
        return this;
    }


    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Map<String, Object> getExtend() {
        return extend;
    }
    public void setExtend(Map<String, Object> extend) {
        this.extend = extend;
    }
}

在 controller 中返回分页信息:

@RequestMapping("/emps")
@ResponseBody
public Msg getEmpsWithJson(@RequestParam(value = "pn", defaultValue = "1") Integer pn){
    //分页之前传入需要分页大小,从第几页开始
    PageHelper.startPage(pn, 5);
    List<Employee> emps = employeeService.getAll();

    //pegeInfo封装了分页是所有信息, 5代表连续显示的页数
    PageInfo page = new PageInfo(emps, 5);
    return Msg.success().add("pageInfo", page);
}

在 jsp 页面通过 ajax 获取分页信息:

function to_page(pn) {
    $.ajax({
        url : "/emps",
        data : "pn="+pn,
        type : "GET",
        success : function (result) {
            //当前页
            result.extend.pageInfo.pageNum;
        }
    });
}

6、尾巴

这是国人写的一款分页插件,很厉害的嘛,又让我感觉自己是一个代码的组装者,和搬砖没什么区别,但这也是必须要做的。继续干。

7、欢迎关注 JavaArtisan 公众号,每周获得新知识

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值