- smalltiger1984
- 等级: 初级会员

- 文章: 37
- 积分: 50
- 来自: 广州

|
Hibernate3提供了DetachedCriteria,使得我们可以在Web层构造detachedCriteria,然后调用业务层Bean,进行动态条件查询,根据这一功能,我设计了通用的抽象Bean基类和分页类支持.
分页支持类:
java 代码
抽象业务类:
java 代码
-
-
-
- package com.javaeye.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.javaeye.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();
- }
- }

出现这情况只要加上一句criteria.setResultTransformer(Criteria.ROOT_ENTITY);就行了,具体的我的另一张帖:具有一个直观的、可扩展的条件查询API是Hibernate的特色
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
| 返回顶楼 |
|
|
- bluemeteor
- 等级:


- 性别:

- 文章: 590
- 积分: 548
- 来自: My Chair

|
我认为Pagination相关的任何代码都应该与业务逻辑部分代码是0耦合的,只是在Action中切入计算生成Pagination相关信息,在View中调用展现
|
| 返回顶楼 |
|
|
- smalltiger1984
- 等级: 初级会员

- 文章: 37
- 积分: 50
- 来自: 广州

|
只有findPageByCriteria这一个方法有一些耦合,如果你不想这样做可用findAllByCriteria这个方法,之后在ACTION那里再组装!
|
| 返回顶楼 |
|
|
- kris_xu
- 等级: 初级会员

- 性别:

- 文章: 150
- 积分: 76
- 来自: 上海

|
很使用的东西
|
| 返回顶楼 |
|
|
- smalltiger1984
- 等级: 初级会员

- 文章: 37
- 积分: 50
- 来自: 广州

|
有什么地方写的不好请提出来!
|
| 返回顶楼 |
|
|