首页 > 编程 > Java > 正文

MyBatis分页插件PageHelper的具体使用

2019-11-26 09:16:07
字体:
来源:转载
供稿:网友

MyBatis分页插件PageHelper

如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工.

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子句

4. PageInfo的结构

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

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();    }  }  .......}

这里只列出所有属性和构造方法,那么可以清晰的看到一些属性的含义,一些属性是如何初始化,并且初始化值是怎样的,更多详细情况可以自己去查看源码,都有中文注释

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表