分页是一个非常重要的功能,这里写一个简单的分页功能。
先看一下效果:
一、Page类—–专门用来存放数据
//每页的数据条数 这里每页5条数据
Integer pageSize=5;
//第几页
Integer pageIndex;
//该表中总共的数据条数
Integer totalNum;
//总页数
Integer totalPage;
//返回的数据 每一页显示的数据
ArrayList<T> list;
//得到总共的页数
public int getTotalPage(){
int page=getTotalNum()/getPageSize();
int m=getTotalNum()%getPageSize();
if(m>0){
page++;
}
return page;
}
//在数据库查询的时候有用到
public int getOffset(){
return (getPageIndex()-1)*getPageSize();
}
二、Dao层
先查数据库中有多少条数据,然后在将数据进行分页。
//查询数据条数
String sql="select count(*) from tb_sys_user";
注意:查询count(*)返回的是一个Long型。
//分页
String sql="select * from tb_sys_user limit ?,?";
三、Service层
//分页
//第一步:查询所有的管理员数据 count(*)
//将Long转换为int类型
int count =(int) (sysUserDao.selectPageBysingle()*1);
//System.out.println("count="+count); 28
Page<SysUser> page = new Page<SysUser>();
//第二步:设置pageIndex
page.setPageIndex(Integer.parseInt(pageIndex));
page.setTotalNum(count);
//第三步:判断是否超页,如果超页,就将PageIndex设为1
if(count<Integer.parseInt(pageIndex)){
page.setPageIndex(1);
}
if(Integer.parseInt(pageIndex)<0){
page.setPageIndex(1);
}
//第四步:调用底层
sysUserDao.selectPage(page);
return page;
四、Servlet
将从Service层得到的数据Page用request域设置,这样,在.jsp中就能得到数据。
Page<SysUser> pages=userService.selectAllManager(pageIndex);
//pages.getList().size();
request.setAttribute("pages", pages);
五、JSP
用foreach循环,得到每一页的数据
//list是每一页的数据
<c:forEach var="item" items="${pages.list}">
<tr>
<td>${item.username }</td>
<td>${item.name }</td>
<td>${item.realSex }</td>
<td>${item.createTime }</td>
<td>${item.status }</td>
<td>
<a href="#">修改</a>
<a href="#">删除</a>
</td>
</tr>
</c:forEach>
页码就用bootStrap里面的模板就行。
由于.jsp文件都是放在WEB-INF下面的,所以不能直接访问,这个时候我们就需要“曲线救国”,创建一个Servlet作为中间介质,先访问Servlet,再跳转到.jsp界面。