mybatis分页插件---PageHelper插件
文档地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md
数据库分页:物理分页和内存分页
1)内存分页:先将所有数据加载内存中,然后从内存中查找分页的数据
2)物理分页:在数据检索数据的时候,只检索分页数据,将数据返回给客户端。
MyBatis提供内存分页 RowBounds参数
Mybatis物理分页
1、自己写sql语句 sql limit ?,?
2、MyBatis插件 MyBatis PageHelper
PageHelper的使用步骤
导人jar
jsqlparser-2.1.jar
pagehelper-5.1.9.jar
maven工程
<!--分页插件-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
spring集成
spring-datasource.xml
<!--分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
<property name="properties">
<value>
helperDialect=mysql
reasonable=true
supportMethodsArguments=true
params=count=countSql
autoRuntimeDialect=true
</value>
</property>
</bean>
</array>
</property>
在service层进行调用分页的方法
PageHelper.startPage(2, 3); 查询第2页 每页显示3条
只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select)方法会被分页。
自定义一个MyPage实体类:
import com.github.pagehelper.Page;
import java.util.List;
public class MyPage<T> {
private int curryPage;
在service层中查询出我们需要的数据:
@Autowired
UserinfoMapper mapper;
@Override
public MyPage<Userinfo> selectUserByCurryPageAndPageSize(int curry, int pageSize) {
PageHelper.startPage(curry, pageSize);
List<Userinfo> allUser = mapper.selectAllUser();
Page page=(Page)allUser;
MyPage myPage=new MyPage(page);
return myPage;
}
在controller中传递MyPage到jsp页面:
@Autowired
UserService userService;
@RequestMapping("/info")
public ModelAndView showUser(@RequestParam(value="pageNum",defaultValue="1") int pageNum){
MyPage<Userinfo> myPage = userService.selectUserByCurryPageAndPageSize(pageNum, 10);
ModelAndView mv=new ModelAndView();
mv.addObject("myPage",myPage);
mv.setViewName("info");
return mv;
}
jsp页面的编写:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table width="80%" border="1">
<tr>
<th>id</th>
<th>username</th>
<th>birthday</th>
<th>sex</th>
<th>address</th>
<th>money</th>
<th>操作</th>
</tr>
<c:forEach items="${myPage.dateList}" var="item">
<tr>
<td>${item.id}</td>
<td>${item.username}</td>
<td>${item.birthday}</td>
<td>${item.sex}</td>
<td>${item.address}</td>
<td>${item.money}</td>
<td><a href="/delete?id=${item.id}">删除</a>
<a href="/toUpdate?id=${item.id}">修改</a>
</td>
</tr>
</c:forEach>
</table>
<a href="/info?pageNum=1">首页</a>
<a href="/info?pageNum=${myPage.curryPage-1}">上一页</a>
<a href="/info?pageNum=${myPage.curryPage}">当前页${myPage.curryPage}</a>
<a href="/info?pageNum=${myPage.curryPage+1}">下一页</a>
<a href="/info?pageNum=${myPage.totalPage}">尾页</a>
</body>
</html>