文章来源http://blog.csdn.net/dingx/archive/2007/08/06/1728287.aspx
package sgf4web.dao;

 import java.io.Serializable;
import java.io.Serializable;
 import java.util.*;
import java.util.*;
 import java.util.regex.Matcher;
import java.util.regex.Matcher;
 import java.util.regex.Pattern;
import java.util.regex.Pattern;

 import org.hibernate.*;
import org.hibernate.*;
 import org.hibernate.criterion.*;
import org.hibernate.criterion.*;
 import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateCallback;
 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 import sgf4web.dao.support.PaginationSupport;
import sgf4web.dao.support.PaginationSupport;
 import sgf4web.util.GenericsUtils;
import sgf4web.util.GenericsUtils;


 /** *//**
/** *//**
 * 泛型Hibernate DAO类
 * 泛型Hibernate DAO类
 *
 * 
 * @author DigitalSonic
 * @author DigitalSonic
 */
 */
 @SuppressWarnings("unchecked")
@SuppressWarnings("unchecked")

 public class HibernateGenericDao<T, ID extends Serializable> extends HibernateDaoSupport ...{
public class HibernateGenericDao<T, ID extends Serializable> extends HibernateDaoSupport ...{
 private Class<T> pojoClass;
    private Class<T> pojoClass;
 
    

 /** *//**
    /** *//**
 * 初始化DAO,获取POJO类型
     * 初始化DAO,获取POJO类型
 */
     */

 public HibernateGenericDao() ...{
    public HibernateGenericDao() ...{
 //        this.pojoClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
//        this.pojoClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
 this.pojoClass = GenericsUtils.getSuperClassGenricType(getClass());
        this.pojoClass = GenericsUtils.getSuperClassGenricType(getClass());
 }
    }
 
    

 /** *//**
    /** *//**
 * 获得该DAO对应的POJO类型
     * 获得该DAO对应的POJO类型
 */
     */

 public Class<T> getPojoClass() ...{
    public Class<T> getPojoClass() ...{
 return this.pojoClass;
        return this.pojoClass;
 }
    }
 
    

 /** *//**
    /** *//**
 * 获得该DAO对应的POJO类型名
     * 获得该DAO对应的POJO类型名
 */
     */

 public String getPojoClassName() ...{
    public String getPojoClassName() ...{
 return getPojoClass().getName();
        return getPojoClass().getName();
 }
    }

 //加载对象
    //加载对象
 
    

 /** *//**
    /** *//**
 * 加载所有的对象
     * 加载所有的对象
 */
     */

 public List<T> loadAll() ...{
    public List<T> loadAll() ...{
 return (List<T>)getHibernateTemplate().loadAll(getPojoClass());
        return (List<T>)getHibernateTemplate().loadAll(getPojoClass());
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据hql查询
     * 根据hql查询
 *
     *
 * @param values 可变参数
     * @param values 可变参数
 */
     */

 public List find(String hql, Object... values) ...{
    public List find(String hql, Object... values) ...{
 return getHibernateTemplate().find(hql, values);
        return getHibernateTemplate().find(hql, values);
 }
    }


 /** *//**
    /** *//**
 * 根据条件加载对象
     * 根据条件加载对象
 *
     * 
 * @param criteria Criteria实例
     * @param criteria Criteria实例
 */
     */

 public List<T> findByCriteria(final Criteria criteria) ...{
    public List<T> findByCriteria(final Criteria criteria) ...{
 List list = criteria.list();
        List list = criteria.list(); 
 return transformResults(list);
        return transformResults(list);
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据条件加载对象
     * 根据条件加载对象
 * @param detachedCriteria DetachedCriteria实例
     * @param detachedCriteria DetachedCriteria实例
 */
     */

 public List<T> findByCriteria(final DetachedCriteria detachedCriteria) ...{
    public List<T> findByCriteria(final DetachedCriteria detachedCriteria) ...{

 return (List<T>) getHibernateTemplate().execute(new HibernateCallback() ...{
        return (List<T>) getHibernateTemplate().execute(new HibernateCallback() ...{

 public Object doInHibernate(Session session) throws HibernateException ...{
               public Object doInHibernate(Session session) throws HibernateException ...{
 Criteria criteria = detachedCriteria.getExecutableCriteria(session);
                   Criteria criteria = detachedCriteria.getExecutableCriteria(session);
 List list = criteria.list();
                   List list = criteria.list(); 
 return transformResults(list);
                   return transformResults(list); 
 }
               }
 }, true);
           }, true);
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据给定的实例查找对象
     * 根据给定的实例查找对象
 */
     */

 public List<T> findByExample(T instance) ...{
    public List<T> findByExample(T instance) ...{
 List<T> results = (List<T>)getHibernateTemplate().findByExample(instance);
        List<T> results = (List<T>)getHibernateTemplate().findByExample(instance);
 return results;
        return results;
 }
    }    
 
    

 /** *//**
    /** *//**
 * 根据ID查找对象
     * 根据ID查找对象
 */
     */

 public T findById(ID id) ...{
    public T findById(ID id) ...{
 return (T) getHibernateTemplate().get(getPojoClassName(), id);
        return (T) getHibernateTemplate().get(getPojoClassName(), id);
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据某个具体属性进行查找
     * 根据某个具体属性进行查找
 */
     */

 public List<T> findByProperty(String propertyName, Object value) ...{
    public List<T> findByProperty(String propertyName, Object value) ...{
 String queryString = "from " + getPojoClassName() + " as model where model."
       String queryString = "from " + getPojoClassName() + " as model where model." 
 + propertyName + "= ?";
                               + propertyName + "= ?";
 return (List<T>)getHibernateTemplate().find(queryString, value);
       return (List<T>)getHibernateTemplate().find(queryString, value);
 }
    }
 
    
 //新建、修改、删除
    //新建、修改、删除
 
    

 /** *//**
    /** *//**
 * 新建对象实例化
     * 新建对象实例化
 */
     */

 public ID save(T transientInstance) ...{
    public ID save(T transientInstance) ...{
 return (ID)getHibernateTemplate().save(transientInstance);
        return (ID)getHibernateTemplate().save(transientInstance);
 }
    }
 
    

 /** *//**
    /** *//**
 * 更新已存在的对象
     * 更新已存在的对象
 */
     */

 public void update(T transientInstance) ...{
    public void update(T transientInstance) ...{
 getHibernateTemplate().update(transientInstance);
        getHibernateTemplate().update(transientInstance);
 }
    }
 
    

 /** *//**
    /** *//**
 * 删除指定ID的对象
     * 删除指定ID的对象
 */
     */

 public void delete(ID id) ...{
    public void delete(ID id) ...{
 T instance = findById(id);
           T instance = findById(id);
 if (instance != null)
           if (instance != null)
 getHibernateTemplate().delete(instance);
               getHibernateTemplate().delete(instance);
 }
    }
 
    

 /** *//**
    /** *//**
 * 删除指定对象
     * 删除指定对象
 */
     */

 public void delete(T persistentInstance) ...{
    public void delete(T persistentInstance) ...{
 getHibernateTemplate().delete(persistentInstance);
        getHibernateTemplate().delete(persistentInstance);
 }
    }    
 
    
 //分页
    //分页

 /** *//**
    /** *//**
 * 根据Criteria加载分页,指定页大小和起始位置
     * 根据Criteria加载分页,指定页大小和起始位置
 */
     */

 public PaginationSupport findPageByCriteria(final Criteria criteria, final int pageSize, final int startIndex) ...{
    public PaginationSupport findPageByCriteria(final Criteria criteria, final int pageSize, final int startIndex) ...{   
 int totalCount = getCountByCriteria(criteria);
        int totalCount = getCountByCriteria(criteria);   
 criteria.setProjection(null);
        criteria.setProjection(null);
 List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
        List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
 items = transformResults(items);
        items = transformResults(items);
 PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
        PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
 return ps;
        return ps;
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据Criteria加载分页,默认页大小,从第0条开始
     * 根据Criteria加载分页,默认页大小,从第0条开始
 */
     */

 public PaginationSupport findPageByCriteria(final Criteria criteria) ...{
    public PaginationSupport findPageByCriteria(final Criteria criteria) ...{   
 return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, 0);
        return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, 0);   
 }
    }   
 
 

 /** *//**
    /** *//**
 * 根据Criteria加载分页,默认页大小,从第startIndex条开始
     * 根据Criteria加载分页,默认页大小,从第startIndex条开始
 */
     */

 public PaginationSupport findPageByCriteria(final Criteria criteria, final int startIndex) ...{
    public PaginationSupport findPageByCriteria(final Criteria criteria, final int startIndex) ...{   
 return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, startIndex);
        return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, startIndex);   
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据Criteria统计总数
     * 根据Criteria统计总数
 */
     */

 public int getCountByCriteria(final Criteria criteria) ...{
    public int getCountByCriteria(final Criteria criteria) ...{   
 Integer count = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
        Integer count = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();    
 return count.intValue();
        return count.intValue();   
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据DetachedCriteria加载分页,指定页大小和起始位置
     * 根据DetachedCriteria加载分页,指定页大小和起始位置
 */
     */

 public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex) ...{
    public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex) ...{   

 return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() ...{
        return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() ...{   

 public Object doInHibernate(Session session) throws HibernateException ...{
            public Object doInHibernate(Session session) throws HibernateException ...{   
 Criteria criteria = detachedCriteria.getExecutableCriteria(session);
                Criteria criteria = detachedCriteria.getExecutableCriteria(session);
 int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
                int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();   
 criteria.setProjection(null);
                criteria.setProjection(null);
 List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
                List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
 items = transformResults(items);
                items = transformResults(items);
 PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
                PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);   
 return ps;
                return ps;   
 }
            }
 }, true);
        }, true);   
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据DetachedCriteria加载分页,默认页大小,从第0条开始
     * 根据DetachedCriteria加载分页,默认页大小,从第0条开始
 */
     */

 public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) ...{
    public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) ...{   
 return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0);
        return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0);   
 }
    }   
 
  

 /** *//**
    /** *//**
 * 根据DetachedCriteria加载分页,默认页大小,从第startIndex条开始
     * 根据DetachedCriteria加载分页,默认页大小,从第startIndex条开始
 */
     */

 public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) ...{
    public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) ...{   
 return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex);
        return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex);   
 }
    } 
 
    

 /** *//**
    /** *//**
 * 根据DetachedCriteria统计总数
     * 根据DetachedCriteria统计总数
 */
     */

 public int getCountByCriteria(final DetachedCriteria detachedCriteria) ...{
    public int getCountByCriteria(final DetachedCriteria detachedCriteria) ...{   

 Integer count = (Integer) getHibernateTemplate().execute(new HibernateCallback() ...{
        Integer count = (Integer) getHibernateTemplate().execute(new HibernateCallback() ...{   

 public Object doInHibernate(Session session) throws HibernateException ...{
            public Object doInHibernate(Session session) throws HibernateException ...{   
 Criteria criteria = detachedCriteria.getExecutableCriteria(session);
                Criteria criteria = detachedCriteria.getExecutableCriteria(session);   
 return criteria.setProjection(Projections.rowCount()).uniqueResult();
                return criteria.setProjection(Projections.rowCount()).uniqueResult();   
 }
            }   
 }, true);
        }, true);   
 return count.intValue();
        return count.intValue();   
 }
    } 
 
    

 /** *//**
    /** *//**
 * 根据hql加载分页,指定页大小和起始位置
     * 根据hql加载分页,指定页大小和起始位置
 */
     */

 public PaginationSupport findPageByQuery(final String hql, final int pageSize, final int startIndex, Object...values) ...{
    public PaginationSupport findPageByQuery(final String hql, final int pageSize, final int startIndex, Object...values) ...{
 int totalCount = getCountByQuery(hql, values);
        int totalCount = getCountByQuery(hql, values);
 
        
 if (totalCount < 1)
        if (totalCount < 1)
 return new PaginationSupport(new ArrayList(0), 0);
            return new PaginationSupport(new ArrayList(0), 0);

 Query query = createQuery(hql, values);
        Query query = createQuery(hql, values);
 List items = query.setFirstResult(startIndex).setMaxResults(pageSize).list();
        List items = query.setFirstResult(startIndex).setMaxResults(pageSize).list();
 PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
        PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
 return ps;
        return ps;
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据hql加载分页,默认页大小,从第0条开始
     * 根据hql加载分页,默认页大小,从第0条开始
 */
     */

 public PaginationSupport findPageByQuery(final String hql, Object...values) ...{
    public PaginationSupport findPageByQuery(final String hql, Object...values) ...{   
 return findPageByQuery(hql, PaginationSupport.PAGESIZE, 0, values);
        return findPageByQuery(hql, PaginationSupport.PAGESIZE, 0, values);   
 }
    }   
 
 

 /** *//**
    /** *//**
 * 根据hql加载分页,默认页大小,从第startIndex条开始
     * 根据hql加载分页,默认页大小,从第startIndex条开始
 */
     */

 public PaginationSupport findPageByQuery(final String hql, final int startIndex, Object...values) ...{
    public PaginationSupport findPageByQuery(final String hql, final int startIndex, Object...values) ...{   
 return findPageByQuery(hql, PaginationSupport.PAGESIZE, startIndex, values);
        return findPageByQuery(hql, PaginationSupport.PAGESIZE, startIndex, values);  
 }
    }
 
    

 /** *//**
    /** *//**
 * 根据hql统计总数
     * 根据hql统计总数
 */
     */

 public int getCountByQuery(final String hql, Object...values) ...{
    public int getCountByQuery(final String hql, Object...values) ...{   
 String countQueryString = " select count (*) " + removeSelect(removeOrders(hql));
        String countQueryString = " select count (*) " + removeSelect(removeOrders(hql));
 List countlist = getHibernateTemplate().find(countQueryString, values);
        List countlist = getHibernateTemplate().find(countQueryString, values);
 return (Integer) countlist.get(0);
        return (Integer) countlist.get(0);
 }
    }
 
    
 //创建Criteria和Query
    //创建Criteria和Query
 
    

 /** *//**
    /** *//**
 * 创建Criteria对象
     * 创建Criteria对象
 *
     *
 * @param criterions 可变的Restrictions条件列表
     * @param criterions 可变的Restrictions条件列表
 */
     */

 public Criteria createCriteria(Criterion...criterions) ...{
    public Criteria createCriteria(Criterion...criterions) ...{
 Criteria criteria = getSession().createCriteria(getPojoClass());
        Criteria criteria = getSession().createCriteria(getPojoClass());
 for (Criterion c : criterions)
        for (Criterion c : criterions)
 criteria.add(c);
            criteria.add(c);
 return criteria;
        return criteria;
 }
    }


 /** *//**
    /** *//**
 * 创建Criteria对象,带排序字段与升降序字段
     * 创建Criteria对象,带排序字段与升降序字段
 */
     */

 public Criteria createCriteria(String orderBy, boolean isAsc, Criterion...criterions) ...{
    public Criteria createCriteria(String orderBy, boolean isAsc, Criterion...criterions) ...{
 Criteria criteria = createCriteria(criterions);
        Criteria criteria = createCriteria(criterions);
 if (isAsc)
        if (isAsc)
 criteria.addOrder(Order.asc(orderBy));
            criteria.addOrder(Order.asc(orderBy));
 else
        else
 criteria.addOrder(Order.desc(orderBy));
            criteria.addOrder(Order.desc(orderBy));
 return criteria;
        return criteria;
 }
    }
 
    

 /** *//**
    /** *//**
 * 方法取自SpringSide.
     * 方法取自SpringSide.
 * 创建Query对象. 对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.
     * 创建Query对象. 对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.
 * 留意可以连续设置,如下:
     * 留意可以连续设置,如下:
 * <pre>
     * <pre>
 * dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();
     * dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();
 * </pre>
     * </pre>
 * 调用方式如下:
     * 调用方式如下:
 * <pre>
     * <pre>
 *        dao.createQuery(hql)
     *        dao.createQuery(hql)
 *        dao.createQuery(hql,arg0);
     *        dao.createQuery(hql,arg0);
 *        dao.createQuery(hql,arg0,arg1);
     *        dao.createQuery(hql,arg0,arg1);
 *        dao.createQuery(hql,new Object[arg0,arg1,arg2])
     *        dao.createQuery(hql,new Object[arg0,arg1,arg2])
 * </pre>
     * </pre>
 *
     *
 * @param values 可变参数.
     * @param values 可变参数.
 */
     */

 public Query createQuery(String hql, Object... values) ...{
    public Query createQuery(String hql, Object... values) ...{
 Query query = getSession().createQuery(hql);
        Query query = getSession().createQuery(hql);

 for (int i = 0; i < values.length; i++) ...{
        for (int i = 0; i < values.length; i++) ...{
 query.setParameter(i, values[i]);
            query.setParameter(i, values[i]);
 }
        }
 return query;
        return query;
 }
    }
 
    

 /** *//**
    /** *//**
 * 方法取自SpringSide.
     * 方法取自SpringSide.
 * 去除hql的select子句,未考虑union的情况
     * 去除hql的select子句,未考虑union的情况
 */
     */

 private static String removeSelect(String hql) ...{
    private static String removeSelect(String hql) ...{
 int beginPos = hql.toLowerCase().indexOf("from");
        int beginPos = hql.toLowerCase().indexOf("from");
 return hql.substring(beginPos);
        return hql.substring(beginPos);
 }
    }


 /** *//**
    /** *//**
 * 方法取自SpringSide.
     * 方法取自SpringSide.
 * 去除hql的orderby子句
     * 去除hql的orderby子句
 */
     */

 private static String removeOrders(String hql) ...{
    private static String removeOrders(String hql) ...{
 Pattern p = Pattern.compile("order\s*by[\w|\W|\s|\S]*", Pattern.CASE_INSENSITIVE);
        Pattern p = Pattern.compile("order\s*by[\w|\W|\s|\S]*", Pattern.CASE_INSENSITIVE);
 Matcher m = p.matcher(hql);
        Matcher m = p.matcher(hql);
 StringBuffer sb = new StringBuffer();
        StringBuffer sb = new StringBuffer();

 while (m.find()) ...{
        while (m.find()) ...{
 m.appendReplacement(sb, "");
            m.appendReplacement(sb, "");
 }
        }
 m.appendTail(sb);
        m.appendTail(sb);
 return sb.toString();
        return sb.toString();
 }
    }
 
    

 /** *//**
    /** *//**
 * 将联合查询的结果内容从Map或者Object[]转换为实体类型,如果没有转换必要则直接返回
     * 将联合查询的结果内容从Map或者Object[]转换为实体类型,如果没有转换必要则直接返回
 */
     */

 private List transformResults(List items) ...{
    private List transformResults(List items) ...{

 if (items.size() > 0) ...{
        if (items.size() > 0) ...{

 if (items.get(0) instanceof Map) ...{
            if (items.get(0) instanceof Map) ...{
 ArrayList list = new ArrayList(items.size());
                ArrayList list = new ArrayList(items.size());

 for (int i = 0; i < items.size(); i++) ...{
                for (int i = 0; i < items.size(); i++) ...{
 Map map = (Map)items.get(i);
                    Map map = (Map)items.get(i);
 list.add(map.get(CriteriaSpecification.ROOT_ALIAS));
                    list.add(map.get(CriteriaSpecification.ROOT_ALIAS));
 }
                }
 return list;
                return list;

 } else if (items.get(0) instanceof Object[]) ...{
            } else if (items.get(0) instanceof Object[]) ...{
 ArrayList list = new ArrayList(items.size());
                ArrayList list = new ArrayList(items.size());
 int pos = 0;
                int pos = 0;

 for (int i = 0; i < ((Object[])items.get(0)).length; i++) ...{
                for (int i = 0; i < ((Object[])items.get(0)).length; i++) ...{

 if (((Object[])items.get(0))[i].getClass() == getPojoClass()) ...{
                    if (((Object[])items.get(0))[i].getClass() == getPojoClass()) ...{
 pos = i;
                        pos = i;
 break;
                        break;
 }
                    }
 }
                }

 for (int i = 0; i < items.size(); i++) ...{
                for (int i = 0; i < items.size(); i++) ...{
 list.add(((Object[])items.get(i))[pos]);
                    list.add(((Object[])items.get(i))[pos]);
 }
                }
 return list;
                return list;
 } else
            } else
 return items;
                return items;
 } else
        } else
 return items;
            return items;
 }
    }
 }
}
 package sgf4web.util;
package sgf4web.util;

 import java.lang.reflect.ParameterizedType;
import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
import java.lang.reflect.Type;


 /** *//**
/** *//**
 * 泛型参数辅助类
 * 泛型参数辅助类
 *
 * 
 * @author DigitalSonic
 * @author DigitalSonic
 */
 */
 @SuppressWarnings("unchecked")
@SuppressWarnings("unchecked")

 public class GenericsUtils ...{
public class GenericsUtils ...{

 /** *//**
    /** *//**
 * 通过反射,获得定义Class时声明的父类的第一个范型参数的类型。
     * 通过反射,获得定义Class时声明的父类的第一个范型参数的类型。
 */
     */

 public static Class getSuperClassGenricType(Class clazz) ...{
    public static Class getSuperClassGenricType(Class clazz) ...{
 return getSuperClassGenricType(clazz, 0);
        return getSuperClassGenricType(clazz, 0);
 }
    }
 
    

 /** *//**
    /** *//**
 * 通过反射,获得定义Class时声明的父类的范型参数的类型。
     * 通过反射,获得定义Class时声明的父类的范型参数的类型。
 * 如没有找到符合要求的范型参数,则递归向上直到Object。
     * 如没有找到符合要求的范型参数,则递归向上直到Object。
 *
     *
 * @param clazz 要进行查询的类
     * @param clazz 要进行查询的类
 * @param index 如有多个范型声明该索引从0开始
     * @param index 如有多个范型声明该索引从0开始
 * @return 在index位置的范型参数的类型,如果无法判断则返回<code>Object.class</code>
     * @return 在index位置的范型参数的类型,如果无法判断则返回<code>Object.class</code>
 */
     */

 public static Class getSuperClassGenricType(Class clazz, int index) ...{
    public static Class getSuperClassGenricType(Class clazz, int index) ...{
 boolean flag = true;
        boolean flag = true;
 Type genType = clazz.getGenericSuperclass();
        Type genType = clazz.getGenericSuperclass();
 Type[] params = null;
        Type[] params = null;
 
        
 if (!(genType instanceof ParameterizedType))
        if (!(genType instanceof ParameterizedType))
 flag = false;
            flag = false;

 else ...{
        else ...{
 params = ((ParameterizedType) genType).getActualTypeArguments();
            params = ((ParameterizedType) genType).getActualTypeArguments();
 if (index >= params.length || index < 0)
            if (index >= params.length || index < 0)
 flag = false;
                flag = false;
 if (!(params[index] instanceof Class))
            if (!(params[index] instanceof Class))
 flag = false;
                flag = false;
 }
        }

 if (!flag) ...{
        if (!flag) ...{
 clazz = clazz.getSuperclass();
            clazz = clazz.getSuperclass();
 if (clazz == Object.class)
            if (clazz == Object.class)
 return Object.class;
                return Object.class;
 else
            else
 return getSuperClassGenricType(clazz, index);
                return getSuperClassGenricType(clazz, index);
 }
        }
 
        
 return (Class) params[index];
        return (Class) params[index];
 }
    }
 }
}

 
 
 package sgf4web.dao.support;
package sgf4web.dao.support;

 import java.util.List;
import java.util.List;


 /** *//**
/** *//**
 * 分页类,参考自JavaEye及SpringSide
 * 分页类,参考自JavaEye及SpringSide
 */
 */
 @SuppressWarnings("unchecked")
@SuppressWarnings("unchecked")

 public class PaginationSupport ...{
public class PaginationSupport ...{
 public final static int PAGESIZE = 10;
    public final static int PAGESIZE = 10;

 private int pageSize = PAGESIZE;
    private int pageSize = PAGESIZE;

 private List items;
    private List items;

 private int totalCount;
    private int totalCount;

 private int[] indexes = new int[0];
    private int[] indexes = new int[0];

 private int startIndex = 0;
    private int startIndex = 0;


 public PaginationSupport(List items, int totalCount) ...{
    public PaginationSupport(List items, int totalCount) ...{
 setPageSize(PAGESIZE);
        setPageSize(PAGESIZE);
 setTotalCount(totalCount);
        setTotalCount(totalCount);
 setItems(items);
        setItems(items);
 setStartIndex(0);
        setStartIndex(0);
 }
    }


 public PaginationSupport(List items, int totalCount, int startIndex) ...{
    public PaginationSupport(List items, int totalCount, int startIndex) ...{
 setPageSize(PAGESIZE);
        setPageSize(PAGESIZE);
 setTotalCount(totalCount);
        setTotalCount(totalCount);
 setItems(items);
        setItems(items);
 setStartIndex(startIndex);
        setStartIndex(startIndex);
 }
    }


 public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) ...{
    public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) ...{
 setPageSize(pageSize);
        setPageSize(pageSize);
 setTotalCount(totalCount);
        setTotalCount(totalCount);
 setItems(items);
        setItems(items);
 setStartIndex(startIndex);
        setStartIndex(startIndex);
 }
    }


 /** *//**
    /** *//**
 * 将页码转换为列表的startIndex,页大小为默认大小
     * 将页码转换为列表的startIndex,页大小为默认大小
 */
     */

 public static int convertFromPageToStartIndex(int pageNo) ...{
    public static int convertFromPageToStartIndex(int pageNo) ...{
 return (pageNo - 1) * PAGESIZE;
        return (pageNo - 1) * PAGESIZE;
 }
    }
 
    

 /** *//**
    /** *//**
 * 将页码转换为列表的startIndex
     * 将页码转换为列表的startIndex
 */
     */

 public static int convertFromPageToStartIndex(int pageNo, int pageSize) ...{
    public static int convertFromPageToStartIndex(int pageNo, int pageSize) ...{
 return (pageNo - 1) * pageSize;
        return (pageNo - 1) * pageSize;
 }
    }


 public List getItems() ...{
    public List getItems() ...{
 return items;
        return items;
 }
    }


 public void setItems(List items) ...{
    public void setItems(List items) ...{
 this.items = items;
        this.items = items;
 }
    }


 public int getPageSize() ...{
    public int getPageSize() ...{
 return pageSize;
        return pageSize;
 }
    }


 public void setPageSize(int pageSize) ...{
    public void setPageSize(int pageSize) ...{
 this.pageSize = pageSize;
        this.pageSize = pageSize;
 }
    }


 public int getTotalCount() ...{
    public int getTotalCount() ...{
 return totalCount;
        return totalCount;
 }
    }


 /** *//**
    /** *//**
 * 设置数据总数,并计算各页起始位置
     * 设置数据总数,并计算各页起始位置
 */
     */

 public void setTotalCount(int totalCount) ...{
    public void setTotalCount(int totalCount) ...{

 if (totalCount > 0) ...{
        if (totalCount > 0) ...{
 this.totalCount = totalCount;
            this.totalCount = totalCount;
 int count = totalCount / pageSize;
            int count = totalCount / pageSize;
 if (totalCount % pageSize > 0)
            if (totalCount % pageSize > 0)
 count++;
                count++;
 indexes = new int[count];
            indexes = new int[count];

 for (int i = 0; i < count; i++) ...{
            for (int i = 0; i < count; i++) ...{
 indexes[i] = pageSize * i;
                indexes[i] = pageSize * i;
 }
            }

 } else ...{
        } else ...{
 this.totalCount = 0;
            this.totalCount = 0;
 }
        }
 }
    }


 public int[] getIndexes() ...{
    public int[] getIndexes() ...{
 return indexes;
        return indexes;
 }
    }


 public void setIndexes(int[] indexes) ...{
    public void setIndexes(int[] indexes) ...{
 this.indexes = indexes;
        this.indexes = indexes;
 }
    }


 public int getStartIndex() ...{
    public int getStartIndex() ...{
 return startIndex;
        return startIndex;
 }
    }


 /** *//**
    /** *//**
 * 设置当前起始位置
     * 设置当前起始位置
 */
     */

 public void setStartIndex(int startIndex) ...{
    public void setStartIndex(int startIndex) ...{
 if (totalCount <= 0)
        if (totalCount <= 0)
 this.startIndex = 0;
            this.startIndex = 0;
 else if (startIndex >= totalCount)
        else if (startIndex >= totalCount)
 this.startIndex = indexes[indexes.length - 1];
            this.startIndex = indexes[indexes.length - 1];
 else if (startIndex < 0)
        else if (startIndex < 0)
 this.startIndex = 0;
            this.startIndex = 0;

 else ...{
        else ...{
 this.startIndex = indexes[startIndex / pageSize];
            this.startIndex = indexes[startIndex / pageSize];
 }
        }
 }
    }


 /** *//**
    /** *//**
 * 获得下页起始位置
     * 获得下页起始位置
 */
     */

 public int getNextIndex() ...{
    public int getNextIndex() ...{
 int nextIndex = getStartIndex() + pageSize;
        int nextIndex = getStartIndex() + pageSize;
 if (nextIndex >= totalCount)
        if (nextIndex >= totalCount)
 return getStartIndex();
            return getStartIndex();
 else
        else
 return nextIndex;
            return nextIndex;
 }
    }


 /** *//**
    /** *//**
 * 获得上页起始位置
     * 获得上页起始位置
 */
     */

 public int getPreviousIndex() ...{
    public int getPreviousIndex() ...{
 int previousIndex = getStartIndex() - pageSize;
        int previousIndex = getStartIndex() - pageSize;
 if (previousIndex < 0)
        if (previousIndex < 0)
 return 0;
            return 0;
 else
        else
 return previousIndex;
            return previousIndex;
 }
    }


 /** *//**
    /** *//**
 * 取总页数.
     * 取总页数.
 */
     */

 public long getTotalPageCount() ...{
    public long getTotalPageCount() ...{
 if (totalCount % pageSize == 0)
        if (totalCount % pageSize == 0)
 return totalCount / pageSize;
            return totalCount / pageSize;
 else
        else
 return totalCount / pageSize + 1;
            return totalCount / pageSize + 1;
 }
    }


 /** *//**
    /** *//**
 * 取该页当前页码,页码从1开始.
     * 取该页当前页码,页码从1开始.
 */
     */

 public long getCurrentPageNo() ...{
    public long getCurrentPageNo() ...{
 return startIndex / pageSize + 1;
        return startIndex / pageSize + 1;
 }
    }


 /** *//**
    /** *//**
 * 该页是否有下一页.
     * 该页是否有下一页.
 */
     */

 public boolean hasNextPage() ...{
    public boolean hasNextPage() ...{
 return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
        return this.getCurrentPageNo() < this.getTotalPageCount() - 1;
 }
    }


 /** *//**
    /** *//**
 * 该页是否有上一页.
     * 该页是否有上一页.
 */
     */

 public boolean hasPreviousPage() ...{
    public boolean hasPreviousPage() ...{
 return this.getCurrentPageNo() > 1;
        return this.getCurrentPageNo() > 1;
 }
    }
 }
} 
 
	posted on 2008-03-06 23:17 
Ke 阅读(5434) 
评论(0)  编辑  收藏  所属分类: 
hibernate 、
spring 、
struts+spring+hibernate