分页原理
两部分组成
- 分页导航信息
- 每个页面的数据查询语句信息
实现这个功能,需要查询的信息:
1. 总记录数:resultSize
2. 每页显示的记录数:pageSize
3. 当前的页码:pageIndex
4. 总页数(需要显示的时候),这是个分页内部的一个属性,有resultSize -1 / pageSize+1得到
不管是哪种实现,上述信息具备即可。
下面使用displaytag 标签,DisplayTag是一个非常好用的表格显示标签,适合MVC模式,其主页在http://displaytag.sourceforge.net
sql的分页 pageIndex = ( pageIndex -1 ) * pageSize
1. mysql 使用limit
select * from users limit pageIndex, pageSize
2. oracle 使用 rownum
select * from (
select a.*, rownum num from (
select * from users order by name desc) a
where rownum <= (pageSize + pageIndex) )
where num >= pageIndex
界面实现
1. 显示页码 jsp
<%@ taglib prefix="display" uri="http://displaytag.sf.net/el" %>
<display:table name="userList" pagesize="10" requestURI="user.do" sort ="external"
id ="row" partialList ="true" size ="resultSize">
<display:column property ="userid" title ="编号"/>
<display:column property ="username" title ="用户名"/>
<display:column property ="email" autolink="true" title ="邮箱"/>
<display:column title="操作">
<a href="user.do?action=delete&id=<c:out value="${row.userid}"/>">删除</a>
</display:column>
</display:table>
说明
table中属性
name="userList" 将记录集存在session或者request中的键值
pagesize="10" 每页显示10条数据
sort="external" 外部排序
id="row" 表格id值,用于程序得相关的参数
partialList="true" 分段从数据库中读数据
column中属性
autolink="true" 自动生成链接 email或者url
其他一些属性可以参考自带的例子
2. controller (user.do) springmvc
Map model = new HashMap();
//页数的参数名
String pageIndexName = new ParamEncoder("row")
.encodeParameterName
(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);
// 每页显示的条数
int pageSize = 10;
// 当前页
int pageIndex = LotteryUtil.isEmpty(request.getParameter(pageIndexName)) ? 0 :
(Integer
.parseInt(request.getParameter(pageIndexName)) - 1);
//总记录
int resultSize = userService.getAllUserCount();
//显示所有
List<User> userList = userService.getUsers(pageIndex, pageSize);
model.put("resultSize", resultSize);
model.put("userList", userList);
return new ModelAndView("userList", model);
上面是使用springmvc实现的,其他的实现类似