Hibernate分页显示更全

  1. 转自:http://fangzuoren.blog.hexun.com/30635503_d.html
  2. package  com.aostarit.erp.dao;   
  3.   
  4. import  java.util.List;   
  5. import  java.util.Map;   
  6. import  java.util.Set;   
  7.   
  8. import  org.hibernate.Criteria;   
  9. import  org.hibernate.criterion.Criterion;   
  10. import  org.hibernate.criterion.Example;   
  11. import  org.hibernate.criterion.Projections;   
  12. import  org.hibernate.criterion.Restrictions;   
  13. import  org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  14.   
  15. import  com.aostarit.erp.util.Pager;   
  16.   
  17. public   class  ManagerDao  extends  HibernateDaoSupport   
  18. {   
  19.   
  20.      private  Class entity;   
  21.   
  22.      public  Class getEntity()   
  23.     {   
  24.          return  entity;   
  25.     }   
  26.   
  27.      public   void  setEntity(Class entity)   
  28.     {   
  29.          this .entity = entity;   
  30.     }   
  31.   
  32.      /**  
  33.      * @function 根据传递过来的hql语句,做相应的查询  
  34.      * @return 返回记录数的集合  
  35.      */   
  36.      public  List getAllInfo(String hql)   
  37.     {   
  38.         List list =  this .getHibernateTemplate().find(hql);   
  39.          return  list;   
  40.     }   
  41.   
  42.      /**  
  43.      * @function 根据传递过来的hql语句,做相应的查询  
  44.      * @return 将查询结果封装成Bean返回  
  45.      */   
  46.      public  Object getBeanInfo(String hql)   
  47.     {   
  48.   
  49.         List list =  this .getHibernateTemplate().find(hql);   
  50.          return  list.get( 0 );   
  51.     }   
  52.   
  53.      /**  
  54.      * @function 查询抢修人员所以记录数  
  55.      * @return 返回记录数的个数  
  56.      */   
  57.      public   int  getTotalCount(String hql)   
  58.     {   
  59.         List list =  this .getHibernateTemplate().find(hql);   
  60.         Integer i = (Integer) list.get( 0 );   
  61.          return  i;   
  62.     }   
  63.   
  64.      /**  
  65.      * @function 分页显示符合所有的记录数,将查询结果封装为Pager  
  66.      * @param pageNo  
  67.      *            当前页数  
  68.      * @param pageSize  
  69.      *            每页显示的条数  
  70.      * @return 查询结果Pager  
  71.      */   
  72.      public  Pager findPageAll( int  pageNo,  int  pageSize)   
  73.     {   
  74.         Pager pager =  null ;   
  75.          try   
  76.         {   
  77.             Criteria criteria =  this .getSession().createCriteria(   
  78.                      this .getEntity());   
  79.   
  80.              // 获取总行数   
  81.              int  rowCount = (Integer) criteria.setProjection(   
  82.                     Projections.rowCount()).uniqueResult();   
  83.             criteria.setProjection( null );   
  84.   
  85.             criteria.setFirstResult((pageNo -  1 ) * pageSize);   
  86.             criteria.setMaxResults(pageSize);   
  87.   
  88.             List result = criteria.list();   
  89.   
  90.             pager =  new  Pager(pageSize, pageNo, rowCount, result);   
  91.   
  92.         }  catch  (RuntimeException re)   
  93.         {   
  94.              throw  re;   
  95.         }  finally   
  96.         {   
  97.              return  pager;   
  98.         }   
  99.     }   
  100.   
  101.      /**  
  102.      * @function 分页显示符合所有的记录数,将查询结果封装为Pager  
  103.      * @param pageNo  
  104.      *            当前页数  
  105.      * @param pageSize  
  106.      *            每页显示的条数  
  107.      * @param map  
  108.      *            将查询条件封装为map  
  109.      * @return 查询结果Pager  
  110.      */   
  111.      public  Pager findPageByCriteria( int  pageNo,  int  pageSize, Map map)   
  112.     {   
  113.         Pager pager =  null ;   
  114.          try   
  115.         {   
  116.             Criteria criteria =  this .getSession().createCriteria(   
  117.                      this .getEntity());   
  118.   
  119.              if  (map !=  null )   
  120.             {   
  121.                 Set keys = map.keySet();   
  122.                  for  (String key : keys)   
  123.                 {   
  124.                     criteria.add(Restrictions.like(key, map.get(key)));   
  125.                 }   
  126.             }   
  127.   
  128.              // 获取根据条件分页查询的总行数   
  129.              int  rowCount = (Integer) criteria.setProjection(   
  130.                     Projections.rowCount()).uniqueResult();   
  131.             criteria.setProjection( null );   
  132.   
  133.             criteria.setFirstResult((pageNo -  1 ) * pageSize);   
  134.             criteria.setMaxResults(pageSize);   
  135.   
  136.             List result = criteria.list();   
  137.   
  138.             pager =  new  Pager(pageSize, pageNo, rowCount, result);   
  139.   
  140.         }  catch  (RuntimeException re)   
  141.         {   
  142.              throw  re;   
  143.         }  finally   
  144.         {   
  145.              return  pager;   
  146.         }   
  147.   
  148.     }   
  149.   
  150.      /**  
  151.      * @function 分页显示符合所有的记录数,将查询结果封装为Pager  
  152.      * @param pageNo  
  153.      *            当前页数  
  154.      * @param pageSize  
  155.      *            每页显示的条数  
  156.      * @param criterions  
  157.      *            不定参数Criterion  
  158.      * @return 查询结果Pager  
  159.      */   
  160.      public  Pager findPageByCriteria( int  pageNo,  int  pageSize,   
  161.             Criterion... criterions)   
  162.     {   
  163.         Pager pager =  null ;   
  164.          try   
  165.         {   
  166.             Criteria criteria =  this .getSession().createCriteria(   
  167.                      this .getEntity());   
  168.              if  (criterions !=  null )   
  169.             {   
  170.                  for  (Criterion criterion : criterions)   
  171.                 {   
  172.                      if  (criterion !=  null )   
  173.                     {   
  174.                         criteria.add(criterion);   
  175.                     }   
  176.   
  177.                 }   
  178.             }   
  179.   
  180.              // 获取根据条件分页查询的总行数   
  181.              int  rowCount = (Integer) criteria.setProjection(   
  182.                     Projections.rowCount()).uniqueResult();   
  183.             criteria.setProjection( null );   
  184.   
  185.             criteria.setFirstResult((pageNo -  1 ) * pageSize);   
  186.             criteria.setMaxResults(pageSize);   
  187.   
  188.             List result = criteria.list();   
  189.   
  190.             pager =  new  Pager(pageSize, pageNo, rowCount, result);   
  191.   
  192.         }  catch  (RuntimeException re)   
  193.         {   
  194.              throw  re;   
  195.         }  finally   
  196.         {   
  197.              return  pager;   
  198.         }   
  199.   
  200.     }   
  201.   
  202.      /**  
  203.      * @function 根据传递过来的Object,在数据库中查找语气匹配的记录  
  204.      * @param pageNo  
  205.      *            当前页数  
  206.      * @param pageSize  
  207.      *            每页显示的记录数  
  208.      * @param object  
  209.      *            将查询条件封装为Object  
  210.      * @return 将查询结果封装为Pager返回  
  211.      */   
  212.      public  Pager findPageByExample( int  pageNo,  int  pageSize, Object object)   
  213.     {   
  214.         Pager pager =  null ;   
  215.          try   
  216.         {   
  217.             Criteria criteria =  this .getSession().createCriteria(   
  218.                      this .getEntity());   
  219.   
  220.              if  (object !=  null )   
  221.             {   
  222.                 criteria.add(Example.create(object).enableLike());   
  223.             }   
  224.   
  225.              // 获取根据条件分页查询的总行数   
  226.              int  rowCount = (Integer) criteria.setProjection(   
  227.                     Projections.rowCount()).uniqueResult();   
  228.             criteria.setProjection( null );   
  229.   
  230.             criteria.setFirstResult((pageNo -  1 ) * pageSize);   
  231.             criteria.setMaxResults(pageSize);   
  232.   
  233.             List result = criteria.list();   
  234.   
  235.             pager =  new  Pager(pageSize, pageNo, rowCount, result);   
  236.   
  237.         }  catch  (RuntimeException re)   
  238.         {   
  239.              throw  re;   
  240.         }  finally   
  241.         {   
  242.              return  pager;   
  243.         }   
  244.   
  245.     }   
  246.   
  247. }  
package com.aostarit.erp.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.aostarit.erp.util.Pager;

public class ManagerDao extends HibernateDaoSupport
{

	private Class entity;

	public Class getEntity()
	{
		return entity;
	}

	public void setEntity(Class entity)
	{
		this.entity = entity;
	}

	/**
	 * @function 根据传递过来的hql语句,做相应的查询
	 * @return 返回记录数的集合
	 */
	public List getAllInfo(String hql)
	{
		List list = this.getHibernateTemplate().find(hql);
		return list;
	}

	/**
	 * @function 根据传递过来的hql语句,做相应的查询
	 * @return 将查询结果封装成Bean返回
	 */
	public Object getBeanInfo(String hql)
	{

		List list = this.getHibernateTemplate().find(hql);
		return list.get(0);
	}

	/**
	 * @function 查询抢修人员所以记录数
	 * @return 返回记录数的个数
	 */
	public int getTotalCount(String hql)
	{
		List list = this.getHibernateTemplate().find(hql);
		Integer i = (Integer) list.get(0);
		return i;
	}

	/**
	 * @function 分页显示符合所有的记录数,将查询结果封装为Pager
	 * @param pageNo
	 *            当前页数
	 * @param pageSize
	 *            每页显示的条数
	 * @return 查询结果Pager
	 */
	public Pager findPageAll(int pageNo, int pageSize)
	{
		Pager pager = null;
		try
		{
			Criteria criteria = this.getSession().createCriteria(
					this.getEntity());

			// 获取总行数
			int rowCount = (Integer) criteria.setProjection(
					Projections.rowCount()).uniqueResult();
			criteria.setProjection(null);

			criteria.setFirstResult((pageNo - 1) * pageSize);
			criteria.setMaxResults(pageSize);

			List result = criteria.list();

			pager = new Pager(pageSize, pageNo, rowCount, result);

		} catch (RuntimeException re)
		{
			throw re;
		} finally
		{
			return pager;
		}
	}

	/**
	 * @function 分页显示符合所有的记录数,将查询结果封装为Pager
	 * @param pageNo
	 *            当前页数
	 * @param pageSize
	 *            每页显示的条数
	 * @param map
	 *            将查询条件封装为map
	 * @return 查询结果Pager
	 */
	public Pager findPageByCriteria(int pageNo, int pageSize, Map map)
	{
		Pager pager = null;
		try
		{
			Criteria criteria = this.getSession().createCriteria(
					this.getEntity());

			if (map != null)
			{
				Set keys = map.keySet();
				for (String key : keys)
				{
					criteria.add(Restrictions.like(key, map.get(key)));
				}
			}

			// 获取根据条件分页查询的总行数
			int rowCount = (Integer) criteria.setProjection(
					Projections.rowCount()).uniqueResult();
			criteria.setProjection(null);

			criteria.setFirstResult((pageNo - 1) * pageSize);
			criteria.setMaxResults(pageSize);

			List result = criteria.list();

			pager = new Pager(pageSize, pageNo, rowCount, result);

		} catch (RuntimeException re)
		{
			throw re;
		} finally
		{
			return pager;
		}

	}

	/**
	 * @function 分页显示符合所有的记录数,将查询结果封装为Pager
	 * @param pageNo
	 *            当前页数
	 * @param pageSize
	 *            每页显示的条数
	 * @param criterions
	 *            不定参数Criterion
	 * @return 查询结果Pager
	 */
	public Pager findPageByCriteria(int pageNo, int pageSize,
			Criterion... criterions)
	{
		Pager pager = null;
		try
		{
			Criteria criteria = this.getSession().createCriteria(
					this.getEntity());
			if (criterions != null)
			{
				for (Criterion criterion : criterions)
				{
					if (criterion != null)
					{
						criteria.add(criterion);
					}

				}
			}

			// 获取根据条件分页查询的总行数
			int rowCount = (Integer) criteria.setProjection(
					Projections.rowCount()).uniqueResult();
			criteria.setProjection(null);

			criteria.setFirstResult((pageNo - 1) * pageSize);
			criteria.setMaxResults(pageSize);

			List result = criteria.list();

			pager = new Pager(pageSize, pageNo, rowCount, result);

		} catch (RuntimeException re)
		{
			throw re;
		} finally
		{
			return pager;
		}

	}

	/**
	 * @function 根据传递过来的Object,在数据库中查找语气匹配的记录
	 * @param pageNo
	 *            当前页数
	 * @param pageSize
	 *            每页显示的记录数
	 * @param object
	 *            将查询条件封装为Object
	 * @return 将查询结果封装为Pager返回
	 */
	public Pager findPageByExample(int pageNo, int pageSize, Object object)
	{
		Pager pager = null;
		try
		{
			Criteria criteria = this.getSession().createCriteria(
					this.getEntity());

			if (object != null)
			{
				criteria.add(Example.create(object).enableLike());
			}

			// 获取根据条件分页查询的总行数
			int rowCount = (Integer) criteria.setProjection(
					Projections.rowCount()).uniqueResult();
			criteria.setProjection(null);

			criteria.setFirstResult((pageNo - 1) * pageSize);
			criteria.setMaxResults(pageSize);

			List result = criteria.list();

			pager = new Pager(pageSize, pageNo, rowCount, result);

		} catch (RuntimeException re)
		{
			throw re;
		} finally
		{
			return pager;
		}

	}

}


BO层代码如下:

Java代码 复制代码
  1. package  com.aostarit.erp.bo;   
  2.   
  3. import  java.util.ArrayList;   
  4. import  java.util.HashMap;   
  5. import  java.util.List;   
  6. import  java.util.Map;   
  7.   
  8. import  org.hibernate.criterion.Criterion;   
  9. import  org.hibernate.criterion.MatchMode;   
  10. import  org.hibernate.criterion.Restrictions;   
  11.   
  12. import  com.aostarit.erp.dao.MendManagerDao;   
  13. import  com.aostarit.erp.po.EicMend;   
  14. import  com.aostarit.erp.util.Pager;   
  15.   
  16. public   class  MendBo   
  17. {   
  18.   
  19.      /**  
  20.      * 依靠Spring的依赖注入,注入抢修人员的Dao  
  21.      */   
  22.      private  MendManagerDao mendManagerDao;   
  23.   
  24.      public  MendManagerDao getMendManagerDao()   
  25.     {   
  26.          return  mendManagerDao;   
  27.     }   
  28.   
  29.      public   void  setMendManagerDao(MendManagerDao mendManagerDao)   
  30.     {   
  31.          this .mendManagerDao = mendManagerDao;   
  32.          try   
  33.         {   
  34.              // 设置该BO操作所对应的pojo   
  35.              this .mendManagerDao.setEntity(Class   
  36.                     .forName( "com.aostarit.erp.po.EicMend" ));   
  37.         }  catch  (ClassNotFoundException e)   
  38.         {   
  39.             e.printStackTrace();   
  40.         }   
  41.     }   
  42.   
  43.      /**  
  44.      * @function 根据传递过来的列名,在数据库中查询该列不重复的记录,前台用下拉框显示  
  45.      * @param column  
  46.      *            传递过来的列名  
  47.      * @return 该列不重复的记录  
  48.      */   
  49.      public  List getColumn(String column)   
  50.     {   
  51.         String table =  "EicMend" ;   
  52.         StringBuffer hql =  new  StringBuffer();   
  53.         hql.append( "select distinct(" ).append(column).append( ") from " ).append(   
  54.                 table).append( " where " ).append(column).append( " is not null" );   
  55.          return  mendManagerDao.getAllInfo(hql.toString());   
  56.     }   
  57.   
  58.      /**  
  59.      * @function 根据传递过来的分页的参数,分页查找数据库中的记录  
  60.      * @param pageNo  
  61.      *            当前的页码  
  62.      * @param pageSize  
  63.      *            每页显示的记录数  
  64.      * @return 符合条件的记录数  
  65.      */   
  66.      public  Pager getAllInfo( int  pageNo,  int  pageSize)   
  67.     {   
  68.         Pager pager = mendManagerDao.findPageAll(pageNo, pageSize);   
  69.          return  pager;   
  70.     }   
  71.   
  72.      /**  
  73.      * @function 将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录  
  74.      * @param pageNo  
  75.      *            当前的页码  
  76.      * @param pageSize  
  77.      *            每页显示的记录数  
  78.      * @param mendName  
  79.      * @param specialt  
  80.      * @param post  
  81.      * @return 将符合条件的记录数以及页码信息封装成PagerBean返回  
  82.      */   
  83.      public  Pager getInfoByQuery1( int  pageNo,  int  pageSize, String mendName,   
  84.             String specialty, String post)   
  85.     {   
  86.   
  87.         EicMend eicMend =  new  EicMend();   
  88.          if  (mendName !=  null  && mendName.length() >  0 )   
  89.         {   
  90.             eicMend.setMendname(mendName);   
  91.         }   
  92.          if  (specialty !=  null  && specialty.length() >  0 )   
  93.         {   
  94.             eicMend.setSpecialty(specialty);   
  95.         }   
  96.          if  (post !=  null  && post.length() >  0 )   
  97.         {   
  98.             eicMend.setPost(post);   
  99.         }   
  100.   
  101.         Pager pager = mendManagerDao.findPageByExample(pageNo, pageSize,   
  102.                 eicMend);   
  103.          return  pager;   
  104.     }   
  105.   
  106.      /**  
  107.      * @function 将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录  
  108.      * @param pageNo  
  109.      *            当前的页码  
  110.      * @param pageSize  
  111.      *            每页显示的记录数  
  112.      * @param mendName  
  113.      *            抢修人员的名称  
  114.      * @param specialty  
  115.      *            抢修人员的工种  
  116.      * @param post  
  117.      *            抢修人员的职称  
  118.      * @return 将符合条件的记录数以及页码信息封装成PagerBean返回  
  119.      */   
  120.      public  Pager getInfoByQuery2( int  pageNo,  int  pageSize, String mendName,   
  121.             String specialty, String post)   
  122.     {   
  123.   
  124.         Map map =  new  HashMap();   
  125.   
  126.          if  (mendName !=  null  && mendName.length() >  0 )   
  127.         {   
  128.             map.put( "mendname""%"  + mendName +  "%" );   
  129.         }   
  130.          if  (specialty !=  null  && specialty.length() >  0 )   
  131.         {   
  132.             map.put( "specialty" , specialty);   
  133.         }   
  134.          if  (post !=  null  && post.length() >  0 )   
  135.         {   
  136.             map.put( "post" , post);   
  137.         }   
  138.   
  139.         Pager pager = mendManagerDao.findPageByCriteria(pageNo, pageSize, map);   
  140.          return  pager;   
  141.     }   
  142.   
  143.      /**  
  144.      * @function 将传递过来的参数封装成抢修人员Bean,分页查询符合条件的记录  
  145.      * @param pageNo  
  146.      *            当前的页码  
  147.      * @param pageSize  
  148.      *            每页显示的记录数  
  149.      * @param mendName  
  150.      *            抢修人员的名称  
  151.      * @param specialty  
  152.      *            抢修人员的工种  
  153.      * @param post  
  154.      *            抢修人员的职称  
  155.      * @return 将符合条件的记录数以及页码信息封装成PagerBean返回  
  156.      */   
  157.      public  Pager getInfoByQuery3( int  pageNo,  int  pageSize, String mendName,   
  158.             String specialty, String post)   
  159.     {   
  160.         Criterion criterion1 =  null , criterion2 =  null , criterion3 =  null ;   
  161.          if  (mendName !=  null  && mendName.length() >  0 )   
  162.         {   
  163.             criterion1 = Restrictions.ilike( "mendname" , mendName,   
  164.                     MatchMode.ANYWHERE);   
  165.         }   
  166.   
  167.          if  (specialty !=  null  && specialty.length() >  0 )   
  168.         {   
  169.             criterion2 = Restrictions.ilike( "specialty" , specialty,   
  170.                     MatchMode.EXACT);   
  171.         }   
  172.   
  173.          if  (post !=  null  && post.length() >  0 )   
  174.         {   
  175.             criterion3 = Restrictions.ilike( "post" , post, MatchMode.EXACT);   
  176.         }   
  177.   
  178.         Pager pager = mendManagerDao.findPageByCriteria(pageNo, pageSize,   
  179.                 criterion1, criterion2, criterion3);   
  180.   
  181.          return  pager;   
  182.     }   
  183.   
  184.      /**  
  185.      * @function 根据所属单位的Id,分页查询相关信息  
  186.      * @param pageNo  
  187.      *            当前页码  
  188.      * @param pageSize  
  189.      *            每页显示的记录数  
  190.      * @param deptId  
  191.      *            所属单位的Id  
  192.      * @return 将符合条件的记录数以及页码信息封装成PagerBean返回  
  193.      */   
  194.      public  Pager getInfoByDept( int  pageNo,  int  pageSize, String deptId)   
  195.     {   
  196.   
  197.         Criterion criterion1 =  null ;   
  198.   
  199.          if  (deptId !=  null  && deptId.length() >  0 )   
  200.         {   
  201.             criterion1 = Restrictions.ilike( "aorganization.orgCode" , deptId,   
  202.                     MatchMode.EXACT);   
  203.         }   
  204.         Pager pager = mendManagerDao.findPageByCriteria(pageNo, pageSize,   
  205.                 criterion1);   
  206.          return  pager;   
  207.   
  208.     }   
  209.   
  210.      /**  
  211.      * @function 根据抢修人员的主键Id,查询抢修人员的详细信息  
  212.      * @param equipId  
  213.      *            抢修人员的主键  
  214.      * @return 将查询结果封装成抢修人员Bean返回  
  215.      */   
  216.      public  EicMend getBeanInfo(String mendId)   
  217.     {   
  218.         StringBuffer hql =  new  StringBuffer();   
  219.         hql.append( "from EicMend e where e.mendid = " ).append(mendId);   
  220.          return  (EicMend) mendManagerDao.getBeanInfo(hql.toString());   
  221.     }   
  222.   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值