hibernate 通用分页

一、hql相比原生sql的缺点
1.配置关系复杂
2.复杂sql查询(多张表时,所以三张及以上介意用原生sql、视图、存储过程)
二、hql的通用分页
1.我们需要先建一个BaseDao去专门处理分页:
BaseDao的代码如下:

private  void setParameter(Query query,Map<String, Object> map) {
	if(map == null || map.size() == 0) {
        return ;			
	}
	Object value = null;
	//给query赋值
	for(Map.Entry<String, Object> entry:map.entrySet()) {
		value = entry.getValue();
		if(value instanceof Collection) {
			query.setParameterList(entry.getKey(), (Collection) value);
		}else if(value instanceof Object[]) {
			query.setParameterList(entry.getKey(), (Object[]) value);
		}else {
			query.setParameter(entry.getKey(),value);
		}
	}
}

private  String getCountHql(String hql) {
	int index = hql.toUpperCase().indexOf("FROM");
	return "select count(*) "+hql.substring(index);
}

/**
 * 外部掉用的一个方法
 */
public  List executeQuery(String hql,PageBean pageBean,Map<String, Object> map,Session session) {
	if(pageBean !=null && pageBean.isPagination()) {
		String countHql = getCountHql(hql);
		Query countquery = session.createQuery(countHql);
		this.setParameter(countquery, map);
		String total = session.createQuery(countHql).getSingleResult().toString();
		pageBean.setTotal(total);
		
		Query pageQuery = session.createQuery(hql);
		this.setParameter(pageQuery, map);
		pageQuery.setFirstResult(pageBean.getStartIndex());
		pageQuery.setMaxResults(pageBean.getRows());
		
		
		return pageQuery.list();
	}else {
		Query query = session.createQuery(hql);
		this.setParameter(query, map);
		return query.list();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值