[置顶] SSH hibernate 分页的几种实现方式

转载请注明出处~!!

第一种:

DetachedCriteria  Criteria 形式

@SuppressWarnings({ "unchecked", "rawtypes" })
	public PageModel getPageModel(final PageModel pageModel, final DetachedCriteria _criteria, Class entityType) throws DataAccessException{
		pageModel.initCriteria(_criteria, entityType);
		
		HibernateCallback<Integer> callback0 = new HibernateCallback<Integer>() {
			public Integer doInHibernate(Session session) throws HibernateException, SQLException {
				Criteria criteria = _criteria.getExecutableCriteria(session);
				criteria.setProjection(Projections.rowCount());
				criteria.setResultTransformer(CriteriaSpecification.PROJECTION);
				Number obj = (Number)criteria.uniqueResult();
				return obj==null ? 0 : obj.intValue();
			}
		};
		final int totalCount = getHibernateTemplate().execute(callback0);
		pageModel.setTotalCount(totalCount);
		if(totalCount>0){
			HibernateCallback<List<TEntity>> callback1 = new HibernateCallback<List<TEntity>>() {
				public List<TEntity> doInHibernate(Session session) throws HibernateException, SQLException {
					Criteria criteria = _criteria.getExecutableCriteria(session);
					criteria.setProjection(null);
					criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
					if(totalCount == 0) return ListUtils.EMPTY_LIST;
					if(pageModel.getPageSize()>0){
						int firstResult = (pageModel.getCurrentPage()-1) * pageModel.getPageSize();
						int maxResult = pageModel.getPageSize();
						if ((firstResult + maxResult) > totalCount) {
							maxResult = totalCount - firstResult;
						}
						criteria.setFirstResult(firstResult);
						criteria.setMaxResults(maxResult);
					}
					List<Order> olist = pageModel.getOrderList();
					if (olist!=null) {
						for (Order o : olist) {
							criteria.addOrder(o);
						}
					}
					return criteria.list();
				}
			};
			pageModel.setResult(getHibernateTemplate().execute(callback1));
		}else{
			pageModel.setResult(Collections.EMPTY_LIST);
		}
		return pageModel;
	}



第二种:

SQL

Hibernate
形式

public PageModel getPagesList(final PageModel pageModel,final DetachedCriteria _criteria, Class entityType,final int totalCount,final KnowledgeType knowledgeType,final String andQuery) {
		pageModel.initCriteria(_criteria, entityType);
		pageModel.setTotalCount(totalCount);
		if(totalCount>0){
			List list = getHibernateTemplate().executeFind(new HibernateCallback() {
				public Object doInHibernate(Session session)
						throws HibernateException, SQLException {
					int firstResult = (pageModel.getCurrentPage()-1) * pageModel.getPageSize();
					int maxResult = pageModel.getPageSize();
					if ((firstResult + maxResult) > totalCount) {
						maxResult = totalCount - firstResult;
					}
					String sql = " SELECT * FROM lc_knowledge_manager AS k "+
								 " WHERE knowledgeType_id "+
								 " IN "+
								 " (SELECT id FROM lc_knowledge_type WHERE topParentName="+
								 " (SELECT topParentName FROM lc_knowledge_type WHERE typeName='" +knowledgeType.getTypeName()+ "' ORDER BY id LIMIT 0,1) AND cateCode LIKE '%" +knowledgeType.getCateCode()+ "%')"+ 
							     andQuery +
								 " ORDER BY id DESC";
					SQLQuery q = session.createSQLQuery(sql);
					q.setCacheable(false);
					return q.addEntity(KnowledgeManager.class)
							.setFirstResult(firstResult)
							.setMaxResults(maxResult)
							.list();
				}

			});
			pageModel.setResult(list);
		}else{
			pageModel.setResult(Collections.EMPTY_LIST);
		}
		return pageModel;
	}


第三种:

HQL

Hibernate
形式


	public PageModel nListArtcs(final int pageNo, final int pageSize,
			final String obj, final String order) {
		List list = getHibernateTemplate().executeFind(new HibernateCallback() {

			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				return session
						.createQuery("from " + obj + " order by id " + order)
						.setFirstResult((pageNo - 1) * pageSize)
						.setMaxResults(pageSize).list();
			}

		});
		return new PageModel(list, this.getListAmount(obj), pageSize, pageNo);
	}



你可能感兴趣的:([置顶] SSH hibernate 分页的几种实现方式)