- 浏览: 447911 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (168)
- Hibernate (17)
- MySQL (7)
- struts2 (14)
- Spring (12)
- Javascript (20)
- CSS (8)
- ajax/jquery (11)
- HttpClient (6)
- HTTP (1)
- java小知识 (23)
- Servlet/JSP (5)
- Oracle (0)
- Quartz (3)
- Lucene/Nutch (12)
- c# winform (2)
- J2ME (1)
- POI (5)
- php5 (2)
- DWR(Ajax) (1)
- log4j (1)
- dom4j (3)
- 獲取郵件聯系人 (2)
- 随意 (5)
- Heritrix (1)
- ireport+jasper (1)
- 算法 (2)
- java虚拟机 (1)
- maven (2)
最新评论
-
janrick:
太感谢了,我正需要加密的函数呢
java中DES加密解密例子 -
xuganggogo:
suyang119 写道请教一下,补充的三级的可以用吗?当然可 ...
关于条件查询detachedCriteria的注意的地方 -
suyang119:
请教一下,补充的三级的可以用吗?
关于条件查询detachedCriteria的注意的地方 -
xuganggogo:
大江帅 写道var name="attriName& ...
有关在JavaScript中使用EL表达式的问题 -
大江帅:
var name="attriName"; ...
有关在JavaScript中使用EL表达式的问题
http://www.iteye.com/topic/14657
Hibernate3提供了DetachedCriteria,使得我们可以在Web层构造detachedCriteria,然后调用业务层Bean,进行动态条件查询,根据这一功能,我设计了通用的抽象Bean基类和分页类支持,代码来自于Quake Wang的javaeye-core包的相应类,然后又做了很多修改。
分页支持类:
package com.iteye.common.util; import java.util.List; public class PaginationSupport { public final static int PAGESIZE = 30; private int pageSize = PAGESIZE; private List items; private int totalCount; private int[] indexes = new int[0]; private int startIndex = 0; public PaginationSupport(List items, int totalCount) { setPageSize(PAGESIZE); setTotalCount(totalCount); setItems(items); setStartIndex(0); } public PaginationSupport(List items, int totalCount, int startIndex) { setPageSize(PAGESIZE); setTotalCount(totalCount); setItems(items); setStartIndex(startIndex); } public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) { setPageSize(pageSize); setTotalCount(totalCount); setItems(items); setStartIndex(startIndex); } public List getItems() { return items; } 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 getStartIndex(); else return nextIndex; } public int getPreviousIndex() { int previousIndex = getStartIndex() - pageSize; if (previousIndex < 0) return 0; else return previousIndex; } }
抽象业务类
/** * Created on 2005-7-12 */ package com.iteye.common.business; 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.iteye.common.util.PaginationSupport; 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); } public Object load(final Class entity, final Serializable id) { return getHibernateTemplate().load(entity, id); } public Object get(final Class entity, final Serializable id) { return getHibernateTemplate().get(entity, id); } public List findAll(final Class entity) { return getHibernateTemplate().find("from " + entity.getName()); } public List findByNamedQuery(final String namedQuery) { return getHibernateTemplate().findByNamedQuery(namedQuery); } public List findByNamedQuery(final String query, final Object parameter) { return getHibernateTemplate().findByNamedQuery(query, parameter); } public List findByNamedQuery(final String query, final Object[] parameters) { return getHibernateTemplate().findByNamedQuery(query, parameters); } public List find(final String query) { return getHibernateTemplate().find(query); } 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); } 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); } 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(); } }
用户在web层构造查询条件detachedCriteria,和可选的startIndex,调用业务bean的相应findByCriteria方法,返回一个PaginationSupport的实例ps。
ps.getItems()得到已分页好的结果集
ps.getIndexes()得到分页索引的数组
ps.getTotalCount()得到总结果数
ps.getStartIndex()当前分页索引
ps.getNextIndex()下一页索引
ps.getPreviousIndex()上一页索引
发表评论
-
hibernate SQLQuery实践指南
2012-11-23 02:22 0http://fengqiaa.blog.163.com/bl ... -
Hibernate DTD <column>元素语法
2012-11-05 14:36 1082记录一下<column>元素的所有属性和用法 ... -
Hibernate DTD <column>元素语法
2012-11-05 14:36 0记录一下<column>元素的所有属性和用法 ... -
spring+hibernate,数据库插入图片
2010-05-10 16:26 1228主要就三個地方需要配置: <一>hbm中, & ... -
Hibernate3.2 核心包作用
2010-03-30 11:00 1109http://blog.csdn.net/liuwyong11 ... -
Sprint2.0 的findByCriteria() 会执行update
2010-02-08 18:31 619今天发现Hibernate的findByCriteria()方 ... -
hibernate疑惑
2009-11-03 11:53 1031hibernate学得不很深入,用hibernate用得越久疑 ... -
hibernate操作数据库 插入修改数据库默认值 dynamic-insert dynamic-update
2009-11-02 16:42 2064今天碰到类似的问题,文章转自http://hi.baidu.c ... -
hibernate datasource 配置详解
2009-08-05 10:50 14179对于某些数据库,例如Oracle来说,没有boolean数据类 ... -
hibernate Restrictions用法
2009-08-04 17:04 40114方法 说明 Restric ... -
hibernate的一对一(唯一外键关联)
2009-07-17 18:14 1920一:hibernate一对一唯一外键关联映射(单向关联Pe ... -
Hibernate 更灵活的用法 HibernateCallback
2009-06-16 12:54 2669在项目中用Hibernate的Deta ... -
DetachedCriteria查詢
2009-05-26 18:16 15531,最簡單簡單的查詢,分页: public List< ... -
关于条件查询detachedCriteria的注意的地方
2009-05-26 16:38 1594http://lingoosoft.blog.ccidnet. ... -
hibernate的各种保存方式的区别(saveOrUpdateCopy,merge和update…
2009-05-26 16:35 1744全文轉自:http://www.blogj ... -
one to many
2009-05-22 15:01 977one to many <!-- 類型包括的項目:類型 ... -
Hibernate乐观锁实现——Version
2009-05-07 12:13 6044乐观并发控制,可以有三种方式。 1,Version版本号 ... -
hibernate分页
2009-05-04 10:33 1577Hibernate 可以实现分页查询,例如: 从第 ... -
Hibernate 支持三种继承映射策略
2009-02-01 16:12 17651,subclass 元素映射子类:用一张表存储整个继承树的 ...
相关推荐
- 在服务层进行分页查询时,可以先创建DetachedCriteria,然后在视图层根据请求参数调整限制条件,避免重复计算。 **4. DetachedCriteria 的基本用法** 创建DetachedCriteria通常从`DetachedCriteria.forClass()`...
要将两者结合起来,我们可以创建一个自定义的SQL查询,并在Hibernate的`DetachedCriteria`中使用。这通常涉及到在HQL中嵌入SQL片段,或者使用`createSQLQuery`方法直接执行SQL查询。同时,别忘了映射查询结果到对应...
总的来说,"springMVC+hibernate的条件查询加分页的demo"涵盖了Web应用中常见的查询和分页需求,通过SpringMVC接收和处理用户请求,利用Hibernate的Criteria查询动态构造SQL,并通过设置分页参数实现数据的分批次...
综上所述,Struts2、Spring和Hibernate的整合使得开发者能够便捷地实现分页查询,从而优化Web应用的性能和用户体验。在实际项目中,需要根据具体需求和业务场景,选择合适的分页策略和实现方式,同时注意性能优化和...
在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API)和HQL(Hibernate Query Language)语句查询。这两种查询方法各有特点,适用...
8. ** Criteria API的DetachedCriteria**:DetachedCriteria允许在不打开Session的情况下构建查询,之后在需要时再与Session结合执行,适合于分页查询和延迟加载。 9. **缓存机制**:Hibernate提供了第一级缓存...
在IT行业中,数据库查询是日常开发中的重要环节,特别是在大型应用中,为了提高用户体验和系统性能,分页、命名参数和排序技术的应用至关重要。本文将深入探讨如何在使用Hibernate框架时,有效地结合这些技术进行...
本文将深入探讨在使用Hibernate进行MySQL查询时的一些关键知识点,以帮助开发者更好地理解和应用这些技术。 首先,我们需要理解Hibernate的核心概念。Hibernate通过提供一个中间层,将Java对象与数据库表进行映射,...
本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...
本教程将深入探讨Hibernate 3.x版本中的查询方式,包括基本查询、HQL(Hibernate Query Language)以及Criteria API,帮助开发者更高效地处理数据库交互。 1. **基本查询(Criteria API)** Hibernate Criteria ...
Criteria查询提供了动态构建查询的方式,可以通过DetachedCriteria实现分页;HQL是面向对象的查询语言,可以方便地进行分页;对于更复杂的SQL操作,可以直接使用SQL查询,并配合 ScrollableResults 接口实现分页。在...
在本文中,我们将探讨基于Hibernate的查询实践,包括HQL(Hibernate Query Language)和Criteria API的使用。我们将通过两个经典的练习题来深入理解这两个查询方式,并讨论它们在处理不同查询需求时的特点。 ### ...
Hibernate提供了方便的分页查询功能,无论是HQL还是Criteria API都能实现。例如: ```java // HQL query.setFirstResult(0).setMaxResults(10); // 第一页,每页10条 // Criteria criteria.setFirstResult(0...
为了解决这个问题,可以在`DetachedCriteria`中设置相应的查询条件,以实现带条件的分页查询。 通过理解和熟练运用这些基本查询方法,你可以有效地利用Hibernate进行数据操作,从而提高开发效率。在实际项目中,还...
3. **集合分页**: 使用Query的setFirstResult()和setMaxResults()方法实现分页查询,避免一次性加载大量数据。 通过以上讲解,我们可以看到,传智播客的Hibernate教程覆盖了从基础到进阶的各个方面,为初学者提供了...
通过DetachedCriteria、Criteria、Projection等接口,可以方便地实现联表查询,同时支持各种查询条件、排序和分页。 6. **多对一(One-to-Many)和一对多(Many-to-One)关联** 这是两种常见的关联关系。在...
6. **查询语言(HQL)**:Hibernate提供的面向对象的查询语言,类似于SQL,但更贴近Java对象,包括简单的查询、复杂查询、条件查询和分页查询。 7. **Criteria API**:另一种进行数据库查询的方式,提供动态构建...
Criteria API提供了一种更灵活的查询方式,通过DetachedCriteria实现离线查询,通过Criteria构建动态查询,结合Projection和Criterion进行结果集处理和条件限制。 8. Hibernate缓存: Hibernate支持二级缓存,...
- 使用Hibernate 3 API,可以方便地实现创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据库记录。例如,`save()`方法用于保存新对象,`update()`用于更新现有对象,`delete()`用于删除对象,`get...
5. ** Criteria和DetachedCriteria**:详细阐述Criteria查询的使用,包括条件查询、排序、分页,以及DetachedCriteria的概念,用于创建可复用的查询模板。 6. **事务和缓存**:讨论Hibernate的事务管理,包括编程式...