怎样用hibernate实现分页和翻页功能

本文介绍如何利用Hibernate进行分页查询和翻页功能的实现。首先定义了一个Page类来存储总页数、总行数和当前页信息。接着在HibernateUtil中创建会话方法。Dao类中实现了分页查询数据和获取总行数的方法。在ListServlet中,通过请求参数获取当前页码,并更新Page对象。最后在list.jsp中遍历页码并处理上一页、下一页的链接。通过这些步骤,实现了点击页码自动跳转及上一页、下一页功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*首先创建一个Page的类*/
package com.niit.page;


public class Page {
private int totalPage=0;//总的页数
private int totalCount=0;//总的行数
private int currentPage=1;//当前页
private int pageSize=5;//每页显示的数据的行数,可以根据情况自行更改
public int getTotalPage() {
if(totalCount%pageSize==0){
totalPage=totalCount/pageSize;
}else{
totalPage=totalCount/pageSize+1;
}
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}


}
/*写一个hibernate会话方法*/
package com.niit.dbutil;


public class HibernateUtil {
private static SessionFactory sf;
static{
Configuration cf=new Configuration().configure();
sf=cf.buildSessionFactory();

}
public Session openSession(){
return sf.openSession();
}
}
/*在Dao类中写分页查询数据的方法和获得总行数的方法*/


public class Dao{
               1.分页查询数据的方法          
                public List<Admin>  selectAdmin(int currentPage,int pageSize){//返回一个List集合,泛型是类Admin
List<Admin>  list=null;
HibernateUtil hUtil=new HibernateUtil();
Session session=hUtil.openSession();//打开会话
int beginIndex=(currentPage-1)*pageSize;//起始索引
Query query=session.createQuery("from Admin");
query.setFirstResult(beginIndex);//起始索引
query.setMaxResults(pageSize);//显示的数据行数
                /*提示:这里之所以要写起始索引和数据行数,是基于mysql语句:select * from 表名 limit 起始索引,数据行数。*/
list=query.list();
return list;
}
                2.获得总行数的方法
                public int getTotalCount(){//获得总的数据的行数
int count=0;
HibernateUtil hUtil=new HibernateUtil();
Session session=hUtil.openSession();
List<Admin> list=session.createQuery("from Admin").list();
count=list.size();
return count;
}
}


/*在ListServlet.Java中*/
Dao dao=new Dao();
Page page=new Page();
page.setTotalCount(dao.getTotalCount());//查询总的行数存入page对象,这样就可以算出总的页数
List<Admin>  list=cd.selectAdmin(page.getCurrentPage(),page.getPageSize());//传入参数
request.setAttribute("list", list);//显示数据
request.setAttribute("page", page);//将分页信息存入request,带到界面
request.getServletContext().getRequestDispatcher("/list.jsp").forward(request, response);


/*在list.jsp中用循环就可以显示每一页的页码*/
 <c:forEach  begin="1" end="${page.totalPage}" var="s">
                      <li><a href="ListServlet?currentPage=${s}">${s}</a></li>
</c:forEach>


那么怎么实现点击每一页的页码的超链接就自动跳转到想要的页面上去呢?
/*在ListServlet中*/
String strPage=request.getParameter("currentPage");//获得点击的页码
int currentPage=0;//定义一个变量
if(strPage==null){//如果是从登录跳转过来的,当前页码是空的
currentPage=1;//默认显示第一页
}else{
currentPage=Integer.parseInt(strPage);
}
page.setCurrentPage(currentPage);//将当前页存入page对象,这样原来Page方法中的currentPage=1就可以随着我们点击不同页码而改变了


那么怎么实现上一页下一页的功能呢
/*在list.jsp*/
<button type="submit" value="submit"><a href="ListServlet?currentPage=${page.currentPage-1}">上一页</a></button>//如果当前页大于1,就可以往上翻
</c:if>
<c:if test="${page.currentPage<=1}">
<button type="submit" value="submit"><a href="ListServlet?currentPage=${page.currentPage}">上一页</a></button>//如果当前页小于等于1,就停留在第一页
</c:if>


<c:if test="${page.currentPage<page.totalPage}">
<button type="submit" value="submit"><a href="EmpServlet?currentPage=${page.currentPage+1}">下一页</a></button>//如果当前页小于最后一页,就可以往下翻
</c:if>
<c:if test="${page.currentPage>=page.totalPage}">
<button type="submit" value="submit"><a href="EmpServlet?currentPage=${page.currentPage}">下一页</a></button>如果当前页大于等于最后一页,就停留在最后一页
</c:if>




以上就是我的一点点小的实践总结,希望能对你有帮助!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值