/**
*
* @此方法描述的是:Hibernate分页
* @param request
* @param HQL
* @param num 页面要要显示的页数
* @param maxResults 每页要显示多少行
* @param currentResult 首页的显示的末记录
* @return
* List
*/
protected List findPageResult(HttpServletRequest request,String HQL, int num, int maxResults, int currentResult){
this.log.debug("BasicAction--->findPageResult--->start:");
String pageFlag = request.getParameter("pageFlag"); //标志位,(下一页,上一页,最后一页,首页,跳转)
int rows; //总行数
int pages; //总页数
//int maxResults = 5; //每页显示的行数
int currentPage = 1; //当前页数
int startPage = 1; //要显示的起始页
int endPage = 1; //要显示的最后一页
int firstResult = 0; //当前页首记录index
//int currentResult = 5; //当前页末记录index
String currentPageTemp = request.getParameter("currentPages"); //获得当前页
if(!this.trimnull(currentPageTemp).equals("")){
currentPage = new Integer(currentPageTemp).intValue();
}
String firstResultTemp = request.getParameter("firstResults"); //获得当前页的首记录
if(!this.trimnull(firstResultTemp).equals("")){
firstResult = new Integer(firstResultTemp).intValue();
}
//初始化sessionFactory
SessionFactory sessionFactory = (SessionFactory) BeanHelp.getBean("sessionFactory");
Session session = sessionFactory.openSession();
String rowsTemp = request.getParameter("rows"); //获得总行数
if(!this.trimnull(rowsTemp).equals("") && !"0".equals(rowsTemp)){//如果总行数不为零或不为空的时候转化为整数,否则为第一次计算
rows = new Integer(rowsTemp).intValue();
}else{ //第一次计算
String HQL_rows = "select count(*) " + HQL.substring(HQL.indexOf("from"));
this.log.debug("HQL_rows="+HQL_rows);
rows = ((Integer)(session.createQuery(HQL_rows).list().get(0))).intValue();//第一次计算得到总行数
}
this.log.debug("rows="+rows);
String pagesTemp = request.getParameter("pages");
if(!this.trimnull(pagesTemp).equals("") && !"0".equals(pagesTemp)){//如果总页数不为零或不为空的时候转化为整数,否则为第一次计算
pages = new Integer(pagesTemp).intValue();
}else if(rows == 0){
pages = 0; //总页数
maxResults = 0; //每页显示的行数
currentPage = 0; //当前页
firstResult = 0; //当前页的首记录
currentResult = 0; //当前页的末记录
}else{
pages = rows/maxResults; //总行数除以每页显示的最大结果数表示为总页数
firstResult = 1;
if(pages < 1) {
currentResult = rows;//如果当前的结果大于1时,看是否有余数,如果有总页数加1
}
if(rows%maxResults>0){
pages++;
}
}
if(pages<num&&pages>=1) { //如果总页数小于9时
endPage = pages; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = 1; //起始页为1
pages = pages; //总页数
}else if(pages>9){ //如果总页数大于9
if(currentPage-num/2<1) { //如果当前页-8<1
endPage = num; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = 1; //起始页为1
pages = pages; //总页数
}else if (currentPage+num/2>pages){ //如果当前页+4<page
endPage = pages; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = pages-num-1; //起始页为1
pages = pages; //总页数
}else{
endPage = currentPage+num/2; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = currentPage-num/2; //起始页为1
pages = pages;
}
}else{
pages = pages; //这个页的最后显示的页数为 pages
endPage = 0; //这个页最后显示的页数为 pages
currentPage = 0; //当前页为1
startPage = 1;
}
if(pageFlag==null){
//
}else if(pageFlag.equals("first")){ //首页
currentPage = 1; //当前页为1
firstResult = 1; //首记录为1
if(rows/maxResults >1) { //总行数/每页显示的最大结果数大于1
currentResult = maxResults; //当前页的麽记录=每页显示的最大结果数
} else { //总行数/每页显示的最大结果数小于1
currentResult = rows%maxResults; //当前页的麽记录=总行数/每页要显示最大结果的余数
}
}else if(pageFlag.equals("last")){ //末页
firstResult = (pages-1)*maxResults; //当前页的首记录=总页数减一乘以每页要显示的最大结果数
currentPage = pages; //当前页就等于总页数
currentResult = rows; //当前页的麽记录=总行数
}else if(pageFlag.equals("next")){ //下一页
currentPage = currentPage + 1; //当前页加以
firstResult = firstResult+maxResults; //当前页的首记录 = 上一页的首记录+每页显示的最大结果
if(pages > currentPage) { //如果总页数大于当前页
currentResult = firstResult + maxResults - 1; //当前页的麽记录 = 当前页的首记录+每页显示的最大结果
} else { //负责
if(rows%maxResults==0) {
currentResult = rows; //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}else{
currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}
}
}else if(pageFlag.equals("before")){ //上一页
currentResult = firstResult-1; //当前页的麽记录 = 上一页的首记录
firstResult = firstResult - maxResults; //当前页的首记录 = 上一页的首记录 - 每页显示的最大结果数
currentPage--;
}else if(pageFlag.equals("changePage")){ //跳页
firstResult = (currentPage-1)*maxResults+1; //当前页的首记录 = (当前页-1)*每要显示的最大结果数
if(pages > currentPage) { //如果总页数大于当前页
currentResult = firstResult + maxResults-1; //当前页的麽记录 = 当前页的首记录 + 每页显示的最大结果数
} else {
//currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
if(rows%maxResults==0) {
currentResult = firstResult+maxResults-1; //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}else{
currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}
}
}
List list = session.createQuery(HQL).setFirstResult(firstResult-1).setMaxResults(maxResults).list();
session.close();
request.setAttribute("rows",rows); //总行数
request.setAttribute("pages",pages); //总页数
request.setAttribute("currentPages",currentPage); //当前页
request.setAttribute("maxResults",maxResults); //当前显示的行数
request.setAttribute("firstResults",firstResult); //当前页的首记录
request.setAttribute("currentResults",currentResult);//当前页的末记录
request.setAttribute("endPages",endPage); //当前页显示的最后页数
request.setAttribute("startPages",startPage); //当前页显示的起始页数
System.out.println("rows==========="+rows);
System.out.println("pages==========="+pages);
System.out.println("maxResults==========="+maxResults);
System.out.println("firstResult==========="+firstResult);
System.out.println("currentResult==========="+currentResult);
System.out.println("startPage==========="+startPage);
System.out.println("currentPages==========="+currentPage);
System.out.println("endPages==========="+endPage);
return list;
}
public String trimnull(String src){
if(src==null||src.equalsIgnoreCase("null")){
return "";
}
return src.trim();
}
分享到:
相关推荐
Hibernate分页查询小结
#### 三、Hibernate分页查询实现原理 ##### 3.1 使用SQL LIMIT实现分页 对于支持LIMIT关键字的数据库(例如MySQL),Hibernate会通过特定的方言(Dialect)来生成包含LIMIT关键字的SQL语句。具体实现如下: ```...
此外,优化查询,避免N+1查询问题,合理设计实体关系,都能有效提升Hibernate分页查询的效率。 总结起来,Hibernate的分页查询和数据库连接管理是其强大功能的重要组成部分。正确理解和使用这些特性,能够帮助...
标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...
让我们深入探讨Hibernate分页查询的相关知识点。 一、Hibernate分页原理 Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults...
hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网http://www.datatables.net/,datatables的功能很 全面。 2,建表的sql--studentinfo和插入...
总结起来,"hibernate分页代码"是一个关于如何在Hibernate中进行分页查询的实践示例,适用于在MyEclipse环境下运行。通过Criteria API或HQL,开发者能够方便地实现分页功能,提升应用性能,为用户提供更好的体验。...
在"Struts + Hibernate 分页实现"这个项目中,重点在于如何在Web应用中整合这两个框架,并实现数据的分页显示。分页是大型数据集处理时常见的需求,它能够帮助用户更有效地浏览和管理大量信息,避免一次性加载所有...
本篇文章将详细讲解如何在基于Struts2、Spring和Hibernate的项目中实现分页功能。 首先,我们从DAO层开始。在`MemberDao`接口中,我们定义了两个关键的方法,一个是用于分页查询,另一个是获取所有记录的数量。这两...
在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...
1. **配置Hibernate分页**: 在Hibernate中,我们通常使用`Criteria`或`Query` API进行分页查询。`Criteria`提供了一种更面向对象的方式来执行SQL查询,而`Query` API则对应于原生的SQL语句。在这些API中,我们可以...
hibernate分页 博文链接:https://iomo.iteye.com/blog/243518
本篇主要围绕"Hibernate分页查询效果"这一主题,深入探讨如何利用Hibernate框架实现高效、便捷的分页功能。 首先,Hibernate是一个优秀的Java持久化框架,它提供了ORM(对象关系映射)解决方案,使得开发者可以使用...
**hibernate分页**是Java开发中一个重要的技术概念,特别是在处理大数据量时,为了提高用户体验和系统性能,分页查询是不可或缺的。Hibernate,作为一款强大的对象关系映射(ORM)框架,提供了多种实现分页查询的...
这个"高效率的dw+spring+hibernate分页演示例子"提供了一个实用的示例,展示了如何将这三个框架整合起来,以实现高效的数据分页功能。 首先,让我们来逐一了解这三个技术: 1. **DWR (Direct Web Remoting)**:DWR...
### Hibernate分页基础 1. **Criteria API**:Hibernate的Criteria API允许我们创建动态查询,同时也支持分页。通过设置`setFirstResult()`和`setMaxResults()`方法,可以实现分页效果。例如: ```java Criteria ...
综上所述,"struts+hibernate分页"涉及到的主要是如何在Struts的控制层和Hibernate的数据层之间协调处理分页请求,以及在DAO层利用Hibernate的特性实现数据库查询的分页。理解并掌握这两个框架的分页机制,对于开发...
java 实现的一个简单的hibernate分页类 可以设置,从某一条开始取、显示的条数 不依赖struts spring
本教程将通过一个具体的“hibernate分页例子”来深入理解如何在Hibernate中实现分页功能。 在实际应用中,当数据量大到一定程度时,一次性加载所有数据会导致内存压力过大,影响系统性能。因此,分页查询成为一种...
本主题将探讨如何在Hibernate分页类和JDBC的SQL分页方法之间实现完美的融合,以提高性能并提供更好的用户体验。 首先,让我们了解一下Hibernate的分页功能。Hibernate提供了一种方便的方式来处理分页查询,通过...