AbstractManager.java
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:3k
源码类别:

OA系统

开发平台:

Java

  1. package com.bjsxt.oa.managers.impl;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import org.hibernate.Query;
  5. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  6. import com.bjsxt.oa.PagerModel;
  7. import com.bjsxt.oa.SystemContext;
  8. import com.bjsxt.oa.managers.SystemException;
  9. public class AbstractManager extends HibernateDaoSupport {
  10. public PagerModel searchPaginated(String hql){
  11. return searchPaginated(hql,null,SystemContext.getOffset(),SystemContext.getPagesize());
  12. }
  13. public PagerModel searchPaginated(String hql,Object param){
  14. return searchPaginated(hql,new Object[]{param},SystemContext.getOffset(),SystemContext.getPagesize());
  15. }
  16. public PagerModel searchPaginated(String hql,Object[] params){
  17. return searchPaginated(hql,params,SystemContext.getOffset(),SystemContext.getPagesize());
  18. }
  19. public PagerModel searchPaginated(String hql,int offset,int pagesize){
  20. return searchPaginated(hql,null,offset,pagesize);
  21. }
  22.  
  23. public PagerModel searchPaginated(String hql,Object obj,int offset,int pagesize){
  24. return searchPaginated(hql,new Object[]{obj},offset,pagesize);
  25. }
  26. /**
  27.  * 根据HQL语句进行分页查询
  28.  * @param hql HQL语句
  29.  * @param params HQL语句带的多个参数值
  30.  * @param offset 从第几条记录开始查询
  31.  * @param pagesize 每页显示多少行
  32.  * @return
  33.  */
  34. public PagerModel searchPaginated(String hql,Object[] params,int offset,int pagesize){
  35. //获取记录总数
  36. String countHql = getCountQuery(hql);
  37. Query query = getSession().createQuery(countHql);
  38. if(params != null && params.length > 0){
  39. for(int i=0; i<params.length; i++){
  40. query.setParameter(i, params[i]);
  41. }
  42. }
  43. int total = ((Long)query.uniqueResult()).intValue();
  44. //获取当前页的结果集
  45. query = getSession().createQuery(hql);
  46. if(params != null && params.length > 0){
  47. for(int i=0; i<params.length; i++){
  48. query.setParameter(i, params[i]);
  49. }
  50. }
  51. query.setFirstResult(offset);
  52. query.setMaxResults(pagesize);
  53. List datas = query.list();
  54. PagerModel pm = new PagerModel();
  55. pm.setTotal(total);
  56. pm.setDatas(datas);
  57. return pm;
  58. }
  59. /**
  60.  * 根据HQL语句,获得查找总记录数的HQL语句
  61.  * 如:
  62.  * select ... from Orgnization o where o.parent is null
  63.  * 经过转换,可以得到:
  64.  * select count(*) from Orgnization o where o.parent is null
  65.  * @param hql
  66.  * @return
  67.  */
  68. private String getCountQuery(String hql){
  69. int index = hql.indexOf("from");
  70. if(index != -1){
  71. return "select count(*) " + hql.substring(index);
  72. }
  73. throw new SystemException("无效的HQL查询语句!");
  74. }
  75. }