`

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

阅读更多

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做分页,如有错误或不好的地方请多多指教!! 

分享到:
评论

相关推荐

    Struts2SpringHibernate实现简单的添加,分页显示功能例子

    4. **分页显示**:为了实现分页,开发者通常会使用HQL(Hibernate Query Language)或者SQL查询语句配合LIMIT和OFFSET关键字来获取指定页码的数据。在Service或DAO层,会有一个方法接收当前页数和每页记录数,计算出...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    `KindEntityDaoHibernate`类实现了`KindEntityDao`接口,并使用Hibernate作为底层的数据访问工具。在这个类中,我们可以通过编写Hibernate HQL或SQL查询语句来实现分页查询。 4. **Struts2 Action** 在Action类中...

    hibernate分页查询 数据库连接

    本篇将深入探讨Hibernate中的分页查询功能以及它如何处理数据库连接,帮助你更有效地管理大数据量的查询操作。 首先,我们来看一下什么是分页查询。在Web应用中,当用户需要浏览大量数据时,一次性加载所有数据不仅...

    用户Hibernate实现的一个分页

    本教程将详细讲解如何使用Hibernate实现分页功能,这对于处理大量数据的Web应用来说至关重要,因为它能够有效地减少数据库负载,提高用户体验。 一、Hibernate分页基础 1. Hibernate的Query和Criteria API都提供了...

    orcl数据库分页源码通过数据库实现分页

    在Java开发中,通常会结合JDBC或ORM框架如Hibernate、MyBatis等实现分页。例如,使用JDBC时,可以在PreparedStatement中设置参数来动态传入分页条件: ```java String sql = "SELECT * FROM your_table ORDER BY ...

    java使用hibernate操作数据库jar

    它允许开发者用Java对象来表示数据库中的记录,而无需关心底层SQL的实现。在Java项目中,Hibernate通过jar包的形式提供服务,使得开发人员能够快速集成并进行数据库操作。 一、Hibernate概览 Hibernate是由JBoss...

    Hibernate 多数据库支持解决方案

    总之,为了实现Hibernate对多数据库的支持,需要精心设计和配置,以确保代码的可移植性,同时兼顾性能和数据一致性。以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过...

    Hibernate实现下拉示分页

    本教程将介绍如何使用Hibernate框架结合Java、Servlet和JSP技术实现下拉式分页功能。Hibernate作为一款强大的ORM(对象关系映射)工具,能够简化数据库操作,使我们无需直接编写SQL语句,即可实现数据的增删改查。 ...

    基于hibernate的简单数据库实现

    **基于Hibernate的简单数据库实现** Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务,使得开发人员可以避免编写大量的SQL语句,从而更加专注于业务逻辑。通过Hibernate...

    hibernate动态数据库进化版

    【hibernate动态数据库进化版】是一个关于Java持久层框架Hibernate深入学习的主题,它主要探讨了如何在实际项目中让Hibernate更加灵活地适应不同的数据库环境,实现动态的SQL生成和执行。这一进化的版本旨在提高开发...

    jsp+hibernate实现的分页,java代码

    本项目是基于`jsp`(Java Server Pages)和`Hibernate`框架实现的分页功能,通过Java代码来详细展示了如何在Web应用中高效地实现这一功能。 `jsp`是Java的一种动态网页技术,允许开发者在HTML中嵌入Java代码,以...

    改AHibernate 实现数据库 自动新增表参数

    在IT行业中,数据库管理和持久化框架的使用是至关重要的,特别是对于Java开发者而言,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。本文将深入探讨如何修改AHibernate(可能是...

    自己动手模仿Hibernate写数据库框架

    Hibernate是一个流行的Java ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使得开发者可以更专注于业务逻辑而不是底层SQL的编写。 【描述】中的"程序代码"提示我们将深入探讨具体的编程实现。博文...

    Struts+Hibernate实现分页

    这样的分页实现保证了数据的高效加载和用户的流畅体验,同时充分利用了Struts的控制层和Hibernate的数据访问层能力,降低了开发复杂度。在实际项目中,还可以考虑优化如缓存、懒加载等策略来进一步提高性能。

    达梦数据库的基本操作以及分页查询等

    根据java语言对达梦DM数据库的连接和操作,包括建表、新增、修改、删除、查询以及复杂查询和分页查询等完整代码,附送Dm7Dictionary的驱动包,此驱动包兼容jdk1.7和jdk1.8本人亲测完美兼容

    hibernate连接金仓数据库所需jar包集合lib.7z

    在使用Hibernate连接金仓数据库时,需要特定的驱动和其他相关jar包来支持这种连接。下面我们将详细介绍这些jar包的作用以及如何配置它们。 首先,"hibernate连接金仓数据库所需jar包集合lib.7z"这个压缩包中包含了...

    spring-boot基于hibernate实现简单分页

    在本文中,我们将深入探讨如何使用Spring Boot与Hibernate框架实现简单的分页功能。Spring Boot以其简洁的配置和快速的应用开发而受到广泛欢迎,而Hibernate作为Java领域中的一个强大的ORM(对象关系映射)工具,...

    hibernate自动生成数据库文件

    在本例中,`hibernate自动生成数据库文件.exe`可能是Hibernate Tools的一个实现,用于将Java类转换为数据库脚本或直接创建数据库。 2. **逆向工程(Reverse Engineering)**:逆向工程是Hibernate Tools中的一个...

    struts hibernate spring 分页ssh分页

    2. **在DAO层实现分页查询**:使用Hibernate的Criteria、HQL或者SQL配合分页参数(如页码和每页大小)来执行分页查询。 3. **在Service层处理分页逻辑**:Service层根据业务需求,调用DAO层的分页查询方法,并返回...

Global site tag (gtag.js) - Google Analytics