以前做项目都是项目做好的公用的插件,没有自己研究过,借着赋闲在家这段日子,整合了Maven+Spring+SpringMVC+MyBatais框架,想着索性加个分页吧,然后就用了PageHelp分页插件。具体过程如下:
1、pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
2、mybatis-config.xml
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
<property name="offsetAsPageNum" value="true"/>
<property name="rowBoundsWithCount" value="true"/>
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="true"/>
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
3、controller
@RequestMapping(value="/user")
public String getUser(@RequestParam(required=true,defaultValue="1") Integer pageNum,@RequestParam(required=false,defaultValue="10") Integer pageSize,Model model)
{
PageHelper.startPage(pageNum, pageSize);
List<User> userList = userService.queryUser();
PageInfo<User> pageInfo = new PageInfo<User>(userList);
model.addAttribute("userList",userList);
model.addAttribute("pageInfo",pageInfo);
return "list_user";
}
4、service,dao,mapper
public List<User> queryUser();
5、JSP
<c:if test="${!empty requestScope.userList }">
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<th>ID</th>
<th>name</th>
<th>password</th>
<th>Edit</th>
<th>Delete</th>
</tr>
<c:forEach items="${userList }" var="user">
<tr>
<td>${user.id }</td>
<td>${user.name }</td>
<td>${user.password }</td>
<td><a href="">Edit</a> </td>
<td><a class="delete" href="">Delete</a>
</td>
</tr>
</c:forEach>
</table>
<p>一共${pageInfo.pages}页</p>
<a href="user?pageNum=1">第一页</a>
<a href="user?pageNum=${pageInfo.nextPage}">下一页</a>
<a href="user?pageNum=${pageInfo.prePage}">上一页</a>
<a href="user?pageNum=${pageInfo.lastPage}">最后页</a>
</c:if>
6、结果
7、出现的问题
本人出现的问题是,时而可以分页,时而不能分页,非得刷新一下地址栏,或者点两次才能分页,郁闷的不行,后来才 知道
原因在哪。
PageHelper.startPage(pageNum, pageSize); 这句话是告诉插件我要开始分页了,而且只对该语句后面的第一个查询进行分页,所以查询语句要写在该句后面,我去,我把查询写在了该句上面,折腾好久找不到原因,郁闷。
PageInfo<User> pageInfo = new PageInfo<User>(userList); ,这句是把list给PageInfo,我想着我都把list给你了,你应该知道是对哪个list分页才是啊,哪知道不是这样的。后来想想也是,startPage方法 每次得到当前页,和每页的条数,再查询,然后再把查询结果给PageInfo才是对的,不然先查询出所有再给PageInfo,是不妥。