abstractmanager.java

来自「这个主要是办公自动化系统的源代码」· Java 代码 · 共 95 行

JAVA
95
字号
package com.ygp.oa.managers.impl;
import java.util.List;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.ygp.oa.PagerModel;
import com.ygp.oa.SystemContext;
import com.ygp.oa.managers.SystemException;

public class AbstractManager extends HibernateDaoSupport{
	//为了增加扩展性,多设置接口,有一个无参数的,有一个参数的
	public PagerModel searchPaginated(String hql){
		return searchPaginated(hql,null,SystemContext.getOffset(),SystemContext.getPagesize());
	}
	
    public PagerModel searchPaginated(String hql,Object param){
		return searchPaginated(hql,new Object[]{param},SystemContext.getOffset(),SystemContext.getPagesize());
	}
    
    
    //不带分页参数,带自己需要的查询参数
    public PagerModel searchPaginated(String hql,Object[] params){
		return searchPaginated(hql,new Object[]{params},SystemContext.getOffset(),SystemContext.getPagesize());
	}
    public PagerModel searchPaginated(String hql,int offset,int pagesize){
		return searchPaginated(hql,null,offset,pagesize);
	}
    public PagerModel searchPaginated(String hql,Object obj,int offset,int pagesize){
		return searchPaginated(hql,new Object[]{obj},offset,pagesize);
	}
    
    
	/**
	 * 根据hql语句进行分页查询
	 * @param hql      hql语句
	 * @param params   HQL语句带的多个参数值
	 * @param offset   从第几条进行查询
	 * @param pagesize 每页显示多少行
	 * @return
	 */
	public PagerModel searchPaginated(String hql,Object[]params,int offset,int pagesize){
		//获取查询总记录
		String countHql=getCountQuery(hql);
		//需要引入import org.hibernate.Query;
		Query query=getSession().createQuery(countHql);
		if(params!=null&&params.length>0){
			for(int i=0;i<params.length;i++){
				query.setParameter(i, params[i]);
			}			
		}
		//count查询后是long类型
		int total=((Long)query.uniqueResult()).intValue();
		
		//获取当前结果
		query=getSession().createQuery(hql);
		if(params!=null&&params.length>0){
			for(int i=0;i<params.length;i++){
				query.setParameter(i, params[i]);
			}
		}
		
		query.setFirstResult(offset);
		query.setMaxResults(pagesize);
		//查询出来之后放到datas
		List datas=query.list();
		
		
		//创建pagermodel
		PagerModel pm=new PagerModel();
		pm.setDatas(datas);
		pm.setTotal(total);
		return pm;
	}
	
	/**
	 * 根据HQL语句,获得查询总记录数的HQL语句
	 * 如:
	 * select ....from  Orgnization o where o.parent is null
	 * 经过转换可得到
	 * select count(*) from Orgnization o where o.parent is null 
	 * @param hql
	 * @return
	 */
	private String getCountQuery(String hql){
		//截取from后面的语句
		int index=hql.indexOf("from");
		if(index!=-1){
			return "select count (*)" +hql.substring(index);
		}
		throw new SystemException ("无效的HQL查询");
	}
	
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?