温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在MyBatis中使用PageHelper分页插件

发布时间:2021-06-09 18:02:08 来源:亿速云 阅读:163 作者:Leah 栏目:编程语言

这篇文章给大家介绍如何在MyBatis中使用PageHelper分页插件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

PageHelper的使用

优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

1.引入pagehelper依赖

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.1.2<ersion>
</dependency>

2.配置applicationContext.xml文件

在spring的sqlsessionfactorybean中增加一个分页拦截器属性
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
              <value>
                <!-- 这里设定你的数据库类型 -->
                helperDialect=mysql
              </value>
            </property>
          </bean>
        </array>
  </property>
</bean>

3.调用PageHelper的方法

在service方法中调用PageHelper的静态方法startPage(注意一定要在实际查询数据库之前调用该方法),传入需要查询的页号和每页大小,返回PageHelper插件提供的PageInfo对象。即可自动完成数据库物理分页,无须在你的sql语句中手工加limit子句

如何在MyBatis中使用PageHelper分页插件

4. PageInfo的结构

关于PageInfo的结构请参看源码,这里通过返回的json来展示。根据需要取PageInfo对象的相应属性即可。

如何在MyBatis中使用PageHelper分页插件

5.PageInfo类说明

类源码(更多源码去github上查看即可):

public class PageInfo<T> implements Serializable {
  private static final long serialVersionUID = 1L;
  //当前页
  private int pageNum;
  //每页的数量
  private int pageSize;
  //当前页的数量
  private int size;
 
  //由于startRow和endRow不常用,这里说个具体的用法
  //可以在页面中"显示startRow到endRow 共size条数据"
 
  //当前页面第一个元素在数据库中的行号
  private int startRow;
  //当前页面最后一个元素在数据库中的行号
  private int endRow;
  //总记录数
  private long total;
  //总页数
  private int pages;
  //结果集
  private List<T> list;
 
  //前一页
  private int prePage;
  //下一页
  private int nextPage;
 
  //是否为第一页
  private boolean isFirstPage = false;
  //是否为最后一页
  private boolean isLastPage = false;
  //是否有前一页
  private boolean hasPreviousPage = false;
  //是否有下一页
  private boolean hasNextPage = false;
  //导航页码数
  private int navigatePages;
  //所有导航页号
  private int[] navigatepageNums;
  //导航条上的第一页
  private int navigateFirstPage;
  //导航条上的最后一页
  private int navigateLastPage;
 
  public PageInfo() {
  }
 
  /**
   * 包装Page对象
   *
   * @param list
   */
  public PageInfo(List<T> list) {
    this(list, 8);
  }
 
  /**
   * 包装Page对象
   *
   * @param list     page结果
   * @param navigatePages 页码数量
   */
  public PageInfo(List<T> list, int navigatePages) {
    if (list instanceof Page) {
      Page page = (Page) list;
      this.pageNum = page.getPageNum();
      this.pageSize = page.getPageSize();
 
      this.pages = page.getPages();
      this.list = page;
      this.size = page.size();
      this.total = page.getTotal();
      //由于结果是>startRow的,所以实际的需要+1
      if (this.size == 0) {
        this.startRow = 0;
        this.endRow = 0;
      } else {
        this.startRow = page.getStartRow() + 1;
        //计算实际的endRow(最后一页的时候特殊)
        this.endRow = this.startRow - 1 + this.size;
      }
    } else if (list instanceof Collection) {
      this.pageNum = 1;
      this.pageSize = list.size();
 
      this.pages = this.pageSize > 0 ? 1 : 0;
      this.list = list;
      this.size = list.size();
      this.total = list.size();
      this.startRow = 0;
      this.endRow = list.size() > 0 ? list.size() - 1 : 0;
    }
    if (list instanceof Collection) {
      this.navigatePages = navigatePages;
      //计算导航页
      calcNavigatepageNums();
      //计算前后页,第一页,最后一页
      calcPage();
      //判断页面边界
      judgePageBoudary();
    }
  }
 
 
.......
}

关于如何在MyBatis中使用PageHelper分页插件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI