- 浏览: 61095 次
- 性别:
- 来自: 西安
最新评论
-
贝塔ZQ:
用插件简单点,pageoffice插件就是实现在线编辑打开文 ...
JAVA操作word 读取模板文件 -
阳韵圣:
<!DOCTYPE HTML PUBLIC " ...
用js来刷新指定页面 -
悲剧了:
够激情
jQuery学习小记 -
xiaoasha:
好东西 写的很详细
用js来刷新指定页面 -
phenom:
浪费了你的资源,把情况说明白点。开始是这样的:
输出用户
9 ...
Hibernate 分页应用
在项目中,分页是经常要用到的,详细记录Hibernate分页技术:
1.借用robbin的代码,稍做修改
AbstractManager.javapackage com.wygl.dao; import java.io.Serializable; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.wygl.service.*; public abstract class AbstractManager extends HibernateDaoSupport { private boolean cacheQueries = false; private String queryCacheRegion; public void setCacheQueries(boolean cacheQueries) { this.cacheQueries = cacheQueries; } public void setQueryCacheRegion(String queryCacheRegion) { this.queryCacheRegion = queryCacheRegion; } public void save(final Object entity) { getHibernateTemplate().save(entity); } public void persist(final Object entity) { getHibernateTemplate().save(entity); } public void update(final Object entity) { getHibernateTemplate().update(entity); } public void delete(final Object entity) { getHibernateTemplate().delete(entity); } @SuppressWarnings("unchecked") public Object load(final Class entity, final Serializable id) { return getHibernateTemplate().load(entity, id); } @SuppressWarnings("unchecked") public Object get(final Class entity, final Serializable id) { return getHibernateTemplate().get(entity, id); } @SuppressWarnings("unchecked") public List findAll(final Class entity) { return getHibernateTemplate().find("from " + entity.getName()); } @SuppressWarnings("unchecked") public List findByNamedQuery(final String namedQuery) { return getHibernateTemplate().findByNamedQuery(namedQuery); } @SuppressWarnings("unchecked") public List findByNamedQuery(final String query, final Object parameter) { return getHibernateTemplate().findByNamedQuery(query, parameter); } @SuppressWarnings("unchecked") public List findByNamedQuery(final String query, final Object[] parameters) { return getHibernateTemplate().findByNamedQuery(query, parameters); } @SuppressWarnings("unchecked") public List find(final String query) { return getHibernateTemplate().find(query); } @SuppressWarnings("unchecked") public List find(final String query, final Object parameter) { return getHibernateTemplate().find(query, parameter); } public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) { return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0); } public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) { return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex); } @SuppressWarnings("unchecked") public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex) { return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue(); criteria.setProjection(null); List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list(); PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex); return ps; } }, true); } @SuppressWarnings("unchecked") public List findAllByCriteria(final DetachedCriteria detachedCriteria) { return (List) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); return criteria.list(); } }, true); } public int getCountByCriteria(final DetachedCriteria detachedCriteria) { Integer count = (Integer) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria = detachedCriteria.getExecutableCriteria(session); return criteria.setProjection(Projections.rowCount()).uniqueResult(); } }, true); return count.intValue(); } }
PaginationSupport.java
package com.wygl.service; import java.util.List; public class PaginationSupport { //每页数量 public final static int PAGESIZE = 30; private int pageSize = PAGESIZE; //查出的记录 @SuppressWarnings("unchecked") private List items; //记录总数 private int totalCount; private int[] indexes = new int[0]; //开始索引号 private int startIndex = 0; //当前页数 private int page = 0; public void setPage(int page){ this.page = page; } public int getPage(){ return startIndex / pageSize + 1; } //总页数 private int totalPage = 0; public void setTotalPage(int totalPage){ this.totalPage = totalPage; } public int getTotalPage(){ int count = totalCount / pageSize; if (totalCount % pageSize > 0) count++; return count; } @SuppressWarnings("unchecked") public PaginationSupport(List items, int totalCount) { setPageSize(PAGESIZE); setTotalCount(totalCount); setItems(items); setStartIndex(0); } @SuppressWarnings("unchecked") public PaginationSupport(List items, int totalCount, int startIndex) { setPageSize(PAGESIZE); setTotalCount(totalCount); setItems(items); setStartIndex(startIndex); } @SuppressWarnings("unchecked") public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) { setPageSize(pageSize); setTotalCount(totalCount); setItems(items); setStartIndex(startIndex); } @SuppressWarnings("unchecked") public List getItems() { return items; } @SuppressWarnings("unchecked") public void setItems(List items) { this.items = items; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { if (totalCount > 0) { this.totalCount = totalCount; int count = totalCount / pageSize; if (totalCount % pageSize > 0) count++; indexes = new int[count]; for (int i = 0; i < count; i++) { indexes[i] = pageSize * i; } } else { this.totalCount = 0; } } public int[] getIndexes() { return indexes; } public void setIndexes(int[] indexes) { this.indexes = indexes; } public int getStartIndex() { return startIndex; } public void setStartIndex(int startIndex) { if (totalCount <= 0) this.startIndex = 0; else if (startIndex >= totalCount) this.startIndex = indexes[indexes.length - 1]; else if (startIndex < 0) this.startIndex = 0; else { this.startIndex = indexes[startIndex / pageSize]; } } public int getNextIndex() { int nextIndex = getStartIndex() + pageSize; if (nextIndex >= totalCount) return -1; else return nextIndex; } public int getPreviousIndex() { int previousIndex = getStartIndex() - pageSize; if (previousIndex < 0) return -1; else return previousIndex; } }
写好2个类后,下来就是应用
2. Action中这样
UserManagerAction.java
/** * DD注释: 显示所有用户 * 分页显示! * @param mapping * @param form * @param request * @param response * @return */ public ActionForward doShowUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ int startIndex; //每页开始索引号 int pageSize = 1; //每页记录数 //获取要访问的页数,第一次访问第一页 String strPage = request.getParameter("page"); if(strPage==""||strPage==null){ startIndex = 0; }else{ startIndex = Integer.parseInt(strPage); } //查找并返回PaginationSupport类型ps,将ps抛到web层 PaginationSupport ps = userService.findUser(pageSize,startIndex); request.setAttribute("ps", ps); System.out.println("2"); return mapping.findForward("showUser"); }
UserService.java
/** * 查找所有用户,分页! * @param pageSize 每页记录数 * @param startIndex 开始索引号 * @return */ public PaginationSupport findUser(int pageSize,int startIndex){ //构造DetachedCriteria动态查询条件 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class); return userDAO.findPageByCriteria(detachedCriteria, pageSize, startIndex); }
3. 在页面这样应用
showUser.jsp
<c:if test="${ps.page-1 !=0 }"> <a href="userManager.do?command=showUser&page=0">首页</a> </c:if> <c:if test="${ps.previousIndex != -1 }"> <a href="userManager.do?command=showUser&page=${ps.previousIndex }">上一页</a> </c:if> 共查到${ps.totalCount }个用户,共${ps.totalPage }页 第${ps.page }页 <c:if test="${ps.nextIndex != -1}"> <a href="userManager.do?command=showUser&page=${ps.nextIndex }">下一页</a> </c:if> <c:if test="${ps.page != ps.totalPage }"> <a href="userManager.do?command=showUser&page=${ps.totalPage -1 }">末页</a> </c:if>
评论
4 楼
phenom
2008-11-01
浪费了你的资源,把情况说明白点。开始是这样的:
输出用户
9* zxcvzxc* 985211* wrfwsh@gmail.com
4* wsh* 985211* wrfwsh@gmail.com
1* wrfwsh* 985211* wrfwsh@gmail.com
struts 输出页码
第[0]页 第[1]页 第[2]页 第[3]页
totalCount:11
startIndex:0
点第二页是这样的:
输出用户
2* archko* 985211* wrfwsh@gmail.com
5* arch* 985211* wrfwsh@gmail.com
10* aftwy* 985211* wrfwsh@gmail.com
struts 输出页码
totalCount:0
startIndex:0
输出用户
9* zxcvzxc* 985211* wrfwsh@gmail.com
4* wsh* 985211* wrfwsh@gmail.com
1* wrfwsh* 985211* wrfwsh@gmail.com
struts 输出页码
第[0]页 第[1]页 第[2]页 第[3]页
totalCount:11
startIndex:0
点第二页是这样的:
输出用户
2* archko* 985211* wrfwsh@gmail.com
5* arch* 985211* wrfwsh@gmail.com
10* aftwy* 985211* wrfwsh@gmail.com
struts 输出页码
totalCount:0
startIndex:0
3 楼
phenom
2008-11-01
对了,把你在DAO里的实现方法放在BaseDAOHibernate里
2 楼
phenom
2008-11-01
我觉得不是这样用的、定义这样一个父类 public class BaseDAOHibernate extends HibernateDaoSupport implements Dao{} 子类:public class UserDaoHibernate extends BaseDAOHibernate implements UserDao{} 子类的接口:public interface UserDao extends Dao{ public PaginationSupport findPageByCriteria( final DetachedCriteria detachedCriteria); public PaginationSupport findPageByCriteria( final DetachedCriteria detachedCriteria,final int startIndex); public PaginationSupport findPageByCriteria( final DetachedCriteria detachedCriteria,final int pageSize, final int startIndex); } 这样就行了。因为它没有依赖任何的DAO类。查询的DetachedCriteria 也是外面构造的。既然是复用,当然不能只用一次了。只要DAO实现类继承了BaseDaoHibernate就有 了这个方法,在其接口上定义就行了? 我是这样就可以成功的。其它代码不变。 有一个问题: 我直接抄它的PanigationSUpport类,没有改变,然后action是: { int pageSize=3; int startIndex; String strPage=request.getParameter("startIndex"); if(strPage==""||strPage==null){ startIndex = 0; }else{ startIndex = Integer.parseInt(strPage); } PaginationSupport ps=mgr.findUserByCriteria(pageSize,startIndex); System.out.println("每页大小"+ps.getPageSize()); System.out.println("开始索引"+ps.getStartIndex()); System.out.println("数据总数"+ps.getTotalCount()); System.out.println("索引数组长度"+ps.getIndexes().length); request.setAttribute("ps",ps); request.setAttribute("comments",ps.getItems()); request.setAttribute("indes",ps.getIndexes()); request.setAttribute("totalCount",ps.getTotalCount()); request.setAttribute("startIndex",ps.getStartIndex()); return mapping.findForward("viewAllComments"); } 打印来的只有startIndex为0时才有 数据:: 每页大小3 开始索引0 数据总数11 索引数组长度4 而点击第二页或是其它的话:Hibernate: select this_.id as id0_1_, this_.username as username0_1_, this_.password as password0_1_, this_.email as email0_1_, picture2_.id as id4_0_, picture2_.pname as pname4_0_, picture2_.premark as premark4_0_, picture2_.pcontent as pcontent4_0_, picture2_.userid as userid4_0_ from wrf.bloguser this_ left outer join wrf.blogpicture picture2_ on this_.id=picture2_.id order by this_.username desc limit ?, ? Hibernate: select count(*) as y0_ from wrf.bloguser this_ order by this_.username desc limit ?, ? 每页大小3 开始索引0 数据总数0 索引数组长度0 JSP页面是这样的。::只有页码。其它略。 <logic:iterate id="item" name="indes" indexId="index"> <a href="viewAllComments.do?startIndex=<bean:write name="item" />"> 第[<bean:write name="index" />]页</a> </logic:iterate> 点第二页,出现的是第二页的内容,但上面打印出来 的结果却不正确的。而且第二页就没有了页码了。都显示为0。哪里出错了?请指教。
1 楼
wjhlangzi
2008-10-16
分页是实现了。中间少点数字。。。
上一页 1 2 3 4 5 6 7 8 9 10 下一页 当前第8页/共33页
上一页 1 2 3 4 5 6 7 8 9 10 下一页 当前第8页/共33页
发表评论
-
struts:从一个action中跳转到另一个action
2010-04-08 11:06 2605平时在action中利用service处理完业务后,直接通过 ... -
Spring中的数据源DataSource
2009-05-13 10:49 1770对于不同的数据库存取 ... -
Spring的applicationContext.xml文件
2009-05-13 10:09 1227以下是详解Spring的applicationContext. ... -
struts标签
2008-01-17 16:46 1006虽然struts标签不咋的,但偶尔看看耶无妨,哈,无妨。 持续 ... -
Hibernate学习笔记
2007-11-22 09:02 1011第一个Hibernate例子现在假设我们在Oracle数据库中 ...
相关推荐
通过以上分析可以看出,利用Spring、Struts与Hibernate这三个框架可以高效地实现Web应用中的分页功能。其中,**PageBean** 类作为基础模型,存储了分页所需的各种信息;**PaginateInterface** 接口定义了分页操作的...
hibernate和struts完美应用和分页演示示例 <br>此工程是hibernate和struts完美应用和分页演示示例。 <br>特点: 一、使用MS SERVER 2000的pubs数据库,并写了演示用的数据库脚本 二、应用hibernate和...
标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...
让我们深入探讨Hibernate分页查询的相关知识点。 一、Hibernate分页原理 Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults...
此外,优化查询,避免N+1查询问题,合理设计实体关系,都能有效提升Hibernate分页查询的效率。 总结起来,Hibernate的分页查询和数据库连接管理是其强大功能的重要组成部分。正确理解和使用这些特性,能够帮助...
在实际应用中,我们通常会在业务层(Service层)处理分页逻辑,然后将`PageBean`对象传递到视图层(如JSP页面),展示分页信息。例如,在服务层,我们可以根据用户请求的页码和每页大小来调用DAO层的分页查询方法,...
在"Struts + Hibernate 分页实现"这个项目中,重点在于如何在Web应用中整合这两个框架,并实现数据的分页显示。分页是大型数据集处理时常见的需求,它能够帮助用户更有效地浏览和管理大量信息,避免一次性加载所有...
总结起来,"hibernate分页代码"是一个关于如何在Hibernate中进行分页查询的实践示例,适用于在MyEclipse环境下运行。通过Criteria API或HQL,开发者能够方便地实现分页功能,提升应用性能,为用户提供更好的体验。...
这里我们讨论的是结合Spring、Hibernate和MySQL实现的分页功能,这是一个常见的技术栈组合,广泛应用于Web应用开发。 Spring是一个开源的Java框架,它提供了全面的编程和配置模型,用于构建企业级应用。Spring的IoC...
在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...
### Hibernate分页基础 1. **Criteria API**:Hibernate的Criteria API允许我们创建动态查询,同时也支持分页。通过设置`setFirstResult()`和`setMaxResults()`方法,可以实现分页效果。例如: ```java Criteria ...
Hibernate分页封装可以应用于各种需要分页的场景,例如,Web应用程序、移动应用程序、桌面应用程序等等。在这些场景中,我们可以使用Hibernate分页封装来提高查询效率和减少数据传输量。 Hibernate分页封装是一种...
一、Hibernate分页基础 1. Hibernate的Query和Criteria API都提供了分页功能。使用`setFirstResult()`方法设置查询开始的位置,即第几条记录,以及`setMaxResults()`方法设置一次返回的最大记录数,这两者结合即可...
1. **配置Hibernate分页**: 在Hibernate中,我们通常使用`Criteria`或`Query` API进行分页查询。`Criteria`提供了一种更面向对象的方式来执行SQL查询,而`Query` API则对应于原生的SQL语句。在这些API中,我们可以...
综上所述,"struts+hibernate分页"涉及到的主要是如何在Struts的控制层和Hibernate的数据层之间协调处理分页请求,以及在DAO层利用Hibernate的特性实现数据库查询的分页。理解并掌握这两个框架的分页机制,对于开发...
本篇将介绍如何使用Struts和Hibernate框架来实现Web应用中的分页功能。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它负责处理用户请求并控制应用程序的流程。而Hibernate则是一...
在IT行业中,开发高效、可扩展的Web应用是至关重要的,...总之,"高效率的dw+spring+hibernate分页演示例子"是一个深入理解现代Java Web开发中重要技术的绝佳实践,对于提升开发技能和掌握企业级应用开发有极大的帮助。
根据提供的标题、描述以及部分内文,我们可以梳理出...通过以上步骤,我们就可以在一个Java Web应用程序中实现Struts2与Hibernate结合的分页功能。这种方法不仅提高了开发效率,而且使得代码更加简洁、易读和易于维护。
本篇主要围绕"Hibernate分页查询效果"这一主题,深入探讨如何利用Hibernate框架实现高效、便捷的分页功能。 首先,Hibernate是一个优秀的Java持久化框架,它提供了ORM(对象关系映射)解决方案,使得开发者可以使用...