pageHelper分页技术

十二,pageHelper分页技术

1.分页简介

PageHelper 是 MyBatis 中非常方便的第三方分页插件。
2) 官方文档:
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

文档说明:https://pagehelper.github.io/docs/howtouse/

2.涉及的名词解释

//当前页
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;

3.使用步骤

1)导入依赖

2)配置分页插件;如果是myBatis使用则在全局配置文件中配置分页插件。如果是ssm整合使用则在spring-mvc中配置分页插件。

3)使用 PageHelper 提供的方法进行分页。

4)可以使用更强大的 PageInfo 封装返回结果。

4.具体使用

案例需求:订单分页查询

1.在父工程pom文件导入依赖

<!--分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

2.配置分页插件

1)mybatis全局配置文件

<plugins>
  <plugin interceptor="com.github.pagehelper.PageInterceptor">
    <!--分页参数合理化  -->
    <property name="reasonable" value="true"/>
  </plugin>
</plugins>

2)spring-mvc配置文件

<!-- 配置SqlSession的工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="plugins">
    <array>
      <bean class="com.github.pagehelper.PageInterceptor">
        <property name="properties">
          <!--使用下面的方式配置参数,一行配置一个 -->
          <value>params=value1</value>
        </property>
      </bean>
    </array>
  </property>
</bean>

3.控制层代码

/**
 * 导入jackson包。
 * 实现查询员工数据
 * @param pn
 * @return
 */
@RequestMapping("/emps")
@ResponseBody
public Msg getEmpsWithJson(
  @RequestParam(value = "pn", defaultValue = "1") Integer pn) {
  // 这不是一个分页查询
  // 引入PageHelper分页插件
  // 在查询之前只需要调用,传入页码,以及每页的大小
  PageHelper.startPage(pn, 5);
  // startPage后面紧跟的这个查询就是一个分页查询
  List<Employee> emps = employeeService.getAll();
  // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
  // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
  PageInfo page = new PageInfo(emps, 5);
  return Msg.success().add("pageInfo", page);
}

/**
 * 查询员工数据(分页查询)
 * @return
 */
//@RequestMapping("/emps")
public String getEmps(@RequestParam(value = "pn",defaultValue = "1") Integer pn, Model model){
  // 这不是一个分页查询;
  // 引入PageHelper分页插件
  // 在查询之前只需要调用,传入页码,以及每页的大小
  PageHelper.startPage(pn,5);
  // startPage后面紧跟的这个查询就是一个分页查询
  List<Employee> emps = employeeService.getAll();
  // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
  // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
  PageInfo page = new PageInfo(emps,5);
  model.addAttribute("pageInfo",page);
  return "list";
}

4.页面展示

<!-- 显示分页信息 -->
<div class="row">
	<!--分页文字信息  -->
	<div class="col-md-6">当前 【${pageInfo.pageNum }】 页,总 【${pageInfo.pages }】
		页,总 【${pageInfo.total }】 条记录</div>
	<!-- 分页条信息 -->
	<div class="col-md-6">
		<nav aria-label="Page navigation">
		<ul class="pagination">
			<li><a href="${APP_PATH }/emps?pn=1">首页</a></li>
			<c:if test="${pageInfo.hasPreviousPage }">
				<li><a href="${APP_PATH }/emps?pn=${pageInfo.pageNum-1}"
					aria-label="Previous"> <span aria-hidden="true">&laquo;</span>
				</a></li>
			</c:if>

			<c:forEach items="${pageInfo.navigatepageNums }" var="page_Num">
				<c:if test="${page_Num == pageInfo.pageNum }">
					<li class="active"><a href="#">${page_Num }</a></li>
				</c:if>
				<c:if test="${page_Num != pageInfo.pageNum }">
					<li><a href="${APP_PATH }/emps?pn=${page_Num }">${page_Num }</a></li>
				</c:if>

			</c:forEach>
			<c:if test="${pageInfo.hasNextPage }">
				<li><a href="${APP_PATH }/emps?pn=${pageInfo.pageNum+1 }"
					aria-label="Next"> <span aria-hidden="true">&raquo;</span>
				</a></li>
			</c:if>
			<li><a href="${APP_PATH }/emps?pn=${pageInfo.pages}">末页</a></li>
		</ul>
		</nav>
	</div>
</div>

Mybatis后续的学习:
mybatis 概述 | 配置文件详解:https://blog.csdn.net/weixin_45606067/article/details/107368570
mybatis 事务 | 动态SQL | 多表查询:https://blog.csdn.net/weixin_45606067/article/details/107368642
mybatis延迟加载 | 缓存机制详解:https://blog.csdn.net/weixin_45606067/article/details/107368706
mybatis 注解开发版:https://blog.csdn.net/weixin_45606067/article/details/107368743
mybatis 逆向工程的使用:https://blog.csdn.net/weixin_45606067/article/details/107368781


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客

猜你喜欢

转载自blog.csdn.net/weixin_45606067/article/details/107368847