1.写一个JavaBean
import java.util.List;
public class PageBean {
private Integer currentPage;//当前页
private Integer totalPage;//总页数
private Integer totalCount;//总纪录数
private Integer pageCount;//每页记录数
private Integer begin;//开始位置
private List<Reader> listReader;//每页显示的集合
//生成set、get方法
//....
}
2.action中使用属性封装获取
//使用属性封装获取
private Integer currentPage =1;
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public String listByPage(){
PageBean pageBean = readerService.listByPage(currentPage);
ServletActionContext.getRequest().setAttribute("pageBean", pageBean);
return "listByPage";
}
3.service层写逻辑
public PageBean listByPage(Integer currentPage) {
//创建PageBean对象
PageBean pageBean = new PageBean();
//当前页
pageBean.setCurrentPage(currentPage);
//总记录数
int totalCount = readerDao.findCount();
pageBean.setTotalCount(totalCount);
//每页显示记录数
int pageSize = 3;//自己设置
//总页数=总记录数除以每页显示记录数
int totalPage = 0;
if(totalCount%pageSize==0){//如果能整除
totalPage = totalCount/pageSize;
}else{//如果不能整除
totalPage = totalCount/pageSize+1;
}
//封装到PageBean中
pageBean.setTotalPage(totalPage);
//开始位置=(当前页-1)*每页纪录数
int begin = (currentPage-1)*pageSize;
//每页纪录的list集合
List<Reader> list = readerDao.findByPage(begin,pageSize);
pageBean.setListReader(list);
return pageBean;
}
4.dao层实现
//查询总记录数
public int findCount() {
List<Object> list = (List<Object>) this.getHibernateTemplate().find("select count(*) from Reader");
if(list.size()!=0&&list!=null){
Object obj = list.get(0);
Long lobj = (Long)obj;
int count = lobj.intValue();
return count;
}
return 0;
}
//查询分页的list
public List<Reader> findByPage(int begin, int pageSize) {
//第一种方法:使用hibernate底层代码实现
//得到sessionFactory
// SessionFactory sessionFactory = this.getHibernateTemplate().getSessionFactory();
// //得到session对象
// Session session = sessionFactory.getCurrentSession();
// //设置分页的信息
// Query query = session.createQuery("from Reader");
// query.setFirstResult(begin);
// query.setMaxResults(pageSize);
// List<Reader> list = query.list();
//第二种方法:使用离线对象和hibernateTemplate的方法实现
//1.创建离线对象,设置对哪个实体类进行操作
DetachedCriteria criteria = DetachedCriteria.forClass(Reader.class);
//2.调用HibernateTemplate中的方法
//第一个参数是离线对象,第二个参数是开始位置,第三个参数是每页记录数
List<Reader> list = (List<Reader>) this.getHibernateTemplate()
.findByCriteria(criteria, begin, pageSize);
return list;
}
5.jsp页面显示
<body>
<table>
<tr>
<td>读者名称</td>
<td>读者地址</td>
<td>读者手机</td>
</tr>
<c:forEach items="${pageBean.listReader }" var="reader">
<tr>
<td>${reader.readName }</td>
<td>${reader.address }</td>
<td>${reader.readPhone }</td>
<td><a href="${pageContext.request.contextPath }/reader_change.action?id=${reader.rid}">修改</a></td>
</tr>
</c:forEach>
</table>
<div style="line-height: 20px;height:20px;text-align:right">
共[<b>${pageBean.totalCount }</b>]条记录,共[<b>${pageBean.totalPage }</b>]页,
当前第[<b>${pageBean.currentPage }</b>]页
<!-- 前一页表示当前页减一
判断如果是第一页,就没有前一页
-->
<c:if test="${pageBean.currentPage!=1 }">
[<a href="${pageContext.request.contextPath }/reader_listByPage.action?currentPage=${pageBean.currentPage-1}">前一页</a>]
</c:if>
<!-- 当前页+1
如果最后一页就没有后一页
-->
<c:if test="${pageBean.currentPage!=pageBean.totalPage }">
[<a href="${pageContext.request.contextPath }/reader_listByPage.action?currentPage=${pageBean.currentPage+1}">后一页</a>
</c:if>
</div>
</body>