GenericDao package com.genrong.exam.manager; import org.hibernate.Query; public interface GenericDao<T> { public T findById(int id); public Query createQuery(String hql,Object... params); public Query createPageQuery(String hql,int offset,int pagesize,Object... params); public T saveOrUpdate(T entity); public void delete(int id); } GenericDaoImpl package com.genrong.exam.manager.impl; import java.lang.reflect.ParameterizedType; import javax.annotation.Resource; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.genrong.exam.manager.GenericDao; public class GenericDaoImpl<T> extends HibernateDaoSupport implements GenericDao<T> { private Class<?> type; public GenericDaoImpl() { this.type = (Class<?>) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } @Resource(name = "sessionFactory") public void setSuperHibernateTemplate(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } public Class<?> getType() { return type; } public void delete(int id) { getHibernateTemplate().delete(findById(id)); } public Query createQuery(String hql, Object... params) { Query query = getSession().createQuery(hql); for (int i = 0; i < params.length; i++) { query.setParameter(i, params[i]); } return query; } public Query createPageQuery(String hql,int offset,int pagesize, Object... params) { Query query = getSession().createQuery(hql); for (int i = 0; i < params.length; i++) { query.setParameter(i, params[i]); } query.setFirstResult(offset).setMaxResults(pagesize); return query; } @SuppressWarnings("unchecked") public T findById(int id) { return (T) getHibernateTemplate().get(getType(), id); } public T saveOrUpdate(T entity) { getHibernateTemplate().saveOrUpdate(entity); return entity; } }