用hibernate实现数据库底层分页 (转自ejunnet)

本文介绍了一种使用Hibernate框架进行数据库分页查询的方法。通过创建SessionFactory确保应用中仅有一个实例,减少服务器负担。实现了获取总页数及指定页数据的功能,并提供了一个具体的JSP页面示例。

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

1、创建SessionFactory,为了减轻服务器负担,保证一个应用中仅生成一个SessionFactory即可.

package dao;

import org.hibernate.cfg.*;
import org.hibernate.*;

public class MySessionFactory {
    
private static Configuration config=null;
    
private static SessionFactory sf=null;
    
private MySessionFactory(){
        config
=new Configuration().configure();
        sf
=config.buildSessionFactory();
    }

    
    
public static SessionFactory getSessionFactory(){
        
if(sf==null){
            
new MySessionFactory();
        }

        
return sf;
    }

    
}

 2、实现分页过程
方法getTotalPage()得到总页数, getObject()将所查询的数据封装到list里!

 

package dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class pageList {
    
// 分页实现代码:
    
// 得到总页数 pagesize为一个页面显示的记录数
    public int getTotalPage(String hql, int pagesize) {
        SessionFactory sf 
= MySessionFactory.getSessionFactory();
        Session session 
= sf.openSession();
        Transaction ts 
= session.beginTransaction();
        Query query 
= session.createQuery(hql);
        List list 
= query.list();
        
int totalrs = list.size();
        
int totalpage = 0;
        
if (totalrs % pagesize > 0{
            totalpage 
= totalrs / pagesize + 1;
        }
 else {
            totalpage 
= totalrs / pagesize;
        }

        ts.commit();
        session.close();
        
return totalpage;
    }


    
// 分页list
    public List getObject(String hql, int page, int pagesize) {
        
if (page < 1)page = 1;
        SessionFactory sf 
= MySessionFactory.getSessionFactory();
        Session session 
= sf.openSession();
        Transaction ts 
= session.beginTransaction();
        Query query 
= session.createQuery(hql);
        query.setFirstResult(page 
* pagesize - pagesize);
        query.setMaxResults(pagesize);
        List list 
= query.list();
        ts.commit();
        
// session.close();
        return list;
    }


    
// 分页代码完
}

代码中page为请求的页面,pagesize为一个页面显示的记录数。

3、应用实例:

 

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding
="GBK"
%>
<%@ page import="dao.*,po.*,java.util.*"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"
    prefix
="bean"
%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"
    prefix
="html"
%>
<%
    
String nowpage = request.getParameter("page");
//如果请求业面为空或第一次访问时,页面设为1
    
if (nowpage == null || nowpage.equals(""))nowpage = "1";
//将nowpage转为整型
    
int mypage = Integer.parseInt(nowpage);
    
if (mypage <= 0)mypage = 1;
//页面记录数设为10
    
int pagesize = 10;
    
String hql = "from ExamStudent";
    pageList pl 
= new pageList();
    
int totalpage = pl.getTotalPage(hql, pagesize);
//当请求页面大于总页数,则将当前请求页面设为最大页数
    
if (mypage > totalpage)mypage = totalpage;
    ArrayList list 
= (ArrayList) pl.getObject(hql, mypage,pagesize);
    Iterator it 
= list.iterator();
%>
<html>
<head>
<title>JSP for AddStudentForm form</title>
</head>
<body>
<table border="1">
    
<tr>
        
<td>学号</td>
        
<td>姓名</td>
        
<td>性别</td>
        
<td>电话</td>
        
<td colspan="2">操作</td>
    
</tr>
    
<%
            
while (it.hasNext()) {
            ExamStudent es 
= (ExamStudent) it.next();
    
%>
    
<tr>
        
<td><%=es.getStudentClassid()%></td>
        
<td><%=es.getStudentName()%></td>
        
<td><%=es.getStudentSex()%></td>
        
<td><%=es.getStudentTel()%></td>
        
<td><href="updateStudent.jsp?id=<%=es.getStudentId()%>">修改</a></td>
        
<td><href="/exam/deleteStudent?id=<%=es.getStudentId()%>">删除</a></td>
    
</tr>
    
<%
        }
        list.clear();
    
%>
    
<tr>
        
<td colspan="6"><href="addStudent.jsp?page=1">首页</a>||<a
            
href="addStudent.jsp?page=<%=mypage-1%>">上一页</a>||<a
            
href="addStudent.jsp?page=<%=mypage+1%>">下一页</a>||<a
            
href="addStudent.jsp?page=<%=totalpage%>">末页</a></td>
    
</tr>
</table>
</body>
</html>

 

页面中page ,nowpage,mypage均为当前请求页面,只是数据类型不同。

//完  第一次用hibernate做分页,如有错误或不好的地方请多多指教!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值