APageHelper分页插件使用
第一步,把分页依赖导进来:
<!-- pagehelper分页插件-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
第二步:在spring-dao.xml中配置分页插件,使得分页插件部署到数据库里面,然后可以进行使用 ,要在sqlsession工厂里面进行配置
<!-- 3.4配置分页插件,使mybatis的分页插件可以使用-->
<property name="plugins">
<array>
<!-- 作用就是,当执行查询持久化操作的时候,修改sql语句 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties" value="helperDialect=mysql"/>
</bean>
</array>
</property>
第三步:在service业务层添加分页的接口 【传递两个参数,当前页码和每一页的页数】
/**
* 分页查询
* @author [lin]
* @param page
* @param pageSize
* @return java.util.List<com.q.pojo.Books>
*/
List<Books> queryAllBookByPage(@Param("page") int page, @Param("pageSize") int pageSize);
第四步:编写业务逻辑类 【这个分页插件就是可以根据传进来的page和pagesize来自动修改sql语句】
//开启分页支持
PageHelper.startPage(page, pageSize);
//调用dao层查询所有
List books = bookMapper.queryAllBook();
//获取分页的相关信息
int prePage = info.getPrePage();
prePage.list 获取所有信息
这三句很重要 在前端获值,就可以传一个对象或者map过去
@Override
public List<Books> queryAllBookByPage(int page, int pageSize) {
//开启分页支持
PageHelper.startPage(page, pageSize);
//调用dao层查询所有
List<Books> books = bookMapper.queryAllBook();
//获取分页的相关信息
PageInfo<Books> info = new PageInfo<>(books);
System.out.println("获取当前页:"+info.getPageNum());
System.out.println("获取每一页的页数"+info.getPageSize());
System.out.println("获取当总页数:"+info.getPages());
System.out.println("获取总记录数"+info.getTotal());
System.out.println("获取第一页"+info.getNavigateFirstPage());
System.out.println("获取最后一页"+info.getNavigateLastPage());
System.out.println("获取上一页"+info.getPrePage());
System.out.println("获取下一页"+info.getNextPage());
System.out.println("获取当前页数据"+info.getList().size());
return books;
}
第五步:进行测试
@Test
public void queryAllBookByPage() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
BookServiceImpl bookServiceImpl = applicationContext.getBean("bookServiceImpl", BookServiceImpl.class);
bookServiceImpl.queryAllBookByPage(1, 4);
}
输出结果:
实例补充:
完整配置
spring+springmvc+mybatis+maven中使用PageHelper插件实现分页
1、效果
2、代码部分(使用PageHelper插件实现分页)
(1)、在项目的pom.xml中添加jar包:pagehelper
分页插件
<!-- pagehelper分页插件-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
(2)、在maybatis配置文件中添加一下代码
要注意不要写错位置,要写在mybatis配置文件里面
<!-- 3.4配置分页插件,使mybatis的分页插件可以使用-->
<property name="plugins">
<array>
<!-- 作用就是,当执行查询持久化操作的时候,修改sql语句 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties" value="helperDialect=mysql"/>
</bean>
</array>
</property>
注意不要写错位置
(3)、在BookMapper.xml中写SQL语句:
写接口的映射文件BookMapper.xml
<!--查询所有-->
<select id="queryAllBook" resultType="com.q.pojo.Books">
SELECT *
from ssmbuild.books
</select>
(4)、在dao层,写方法:我的是(BookMapper.java)
/**
* 查询所有的书 分页查询
*
* @return {@link List<Books>}
*///查询全部Book,返回list集合
List<Books> queryAllBook();
(5)、在Service层
Service接口代码:
/**
* 分页查询
* @author [lin]
* @param page
* @param pageSize
* @return java.util.List<com.q.pojo.Books>
*/
List<Books> queryAllBookByPage();
Service接口实现类中代码:
@Override
public List<Books> queryAllBookByPage() {
return bookMapper.queryAllBook();
}
(6)、在Controller层
@RequestMapping("/allBook")
public String queryAllBookByPage(@RequestParam(defaultValue = "1", value = "page") Integer page, Model model) {
//开启分页插件 //PageHelper.startPage(pageNum, pageSize);
// 这段代码表示,程序开始分页了,
// pageNum默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageHelper.startPage(page, 3);
// 查询列表的结果
List<Books> books = bookService.queryAllBookByPage();
// 得到分页的结果对象 里面包含分页后是所有信息
PageInfo<Books> pageInfo = new PageInfo<>(books);
model.addAttribute("page", pageInfo);
System.out.println(pageInfo.getList());
return "allBook";
}
(@RequestParam(defaultValue = "1", value = "page") Integer page, Model model)
这个配置很重要,设定默认值 那个page要用integer类型,因为当page为null的时候就不会报错。
(7)、测试
测试类中的代码如下:
@Test
public void queryAllBookByPage() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
BookServiceImpl bookServiceImpl = applicationContext.getBean("bookServiceImpl", BookServiceImpl.class);
List<Books> books = bookServiceImpl.queryAllBookByPage();
PageHelper.startPage(1, 3);
PageInfo<Books> pageInfo = new PageInfo<>(books);
List<Books> list = pageInfo.getList();
System.out.println(list);//输出所有信息
System.out.println(pageInfo.getPageSize());
}
打印结果:
前端页面:
获取分页后的信息也很重要,很容易会出错,注意
<div class="row clearfix">
<div class="col-md-15 column">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>书籍编号</th>
<th>书籍名字</th>
<th>书籍数量</th>
<th>书籍详情</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach var="book" items="${page.list}">
<tr>
<td>${book.bookId}</td>
<td>${book.bookName}</td>
<td>${book.bookCounts}</td>
<td>${book.detail}</td>
<td id="admin2">
<a id="" class=" btn btn-warning "
href="${pageContext.request.contextPath}/book/toUpdateBook/${book.bookId}"><i
class="glyphicon glyphicon-floppy-saved"></i>修改</a>
|
<a id="admin3" class=" btn btn-warning "
href="${pageContext.request.contextPath}/book/deleteBook/${book.bookId}"
οnclick="return del()"><i class="glyphicon glyphicon-trash"></i> 删除</a>
<a id="admin4" class=" btn btn-warning "
href="${pageContext.request.contextPath}#"><i class="glyphicon glyphicon-bed"></i> 加入购物车</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div align="center">
<div class="col-md-6">第 ${page.pageNum} 页,共${page.pages}页,${page.total} 条记录</div>
<a href="${pageContext.request.contextPath}/book/allBook/?page=1">首页</a>
<c:choose>
<c:when test="${page.pageNum - 1 > 0}">
<a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum - 1}">上一页</a>
</c:when>
<c:when test="${page.pageNum - 1 <= 0}">
<a href="${pageContext.request.contextPath}/book/allBook/?page=1">上一页</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.pages==0}">
<a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum}">下一页</a>
</c:when>
<c:when test="${page.pageNum + 1 < page.pages}">
<a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum + 1}">下一页</a>
</c:when>
<c:when test="${page.pageNum + 1 >= page.pages}">
<a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pages}">下一页</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.pages==0}">
<a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pageNum}">尾页</a>
</c:when>
<c:otherwise>
<a href="${pageContext.request.contextPath}/book/allBook/?page=${page.pages}">尾页</a>
</c:otherwise>
</c:choose>
</div>
</div>
OK!