前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis 分页插件 PageHelper 简单使用流程

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

作者头像
万能青年
发布2019-08-30 14:38:52
1.6K0
发布2019-08-30 14:38:52
举报

1、添加 pom.xml 依赖

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

代码语言:javascript
复制
<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.0.0</version>
</dependency>

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

代码语言:javascript
复制
<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 方式封装分页信息

代码语言:javascript
复制
//从第一页开始查询,连续查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返回数据,进行包装,更方便浏览器解析)

代码语言:javascript
复制
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 中返回分页信息:

代码语言:javascript
复制
@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 获取分页信息:

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

6、尾巴

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaArtisan 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档