public interface BaseDAO { void save(T instance); void update(T instance); void delete(T instance); T get(String id); List<T> findAll(); List<T> findByExample(T instance); int bulkUpdate(String hql); int bulkUpdate(String hql, Object value); int bulkUpdate(String hql, Object[] value); List<T> find(String queryString); List<T> find(String queryString, Object obj); List<T> find(String queryString, Object[] obj); List<T> findByNamedParam(String queryString, String paramName, Object value); List<T> findByNamedParam(String queryString, String[] paramNames, Object[] values); List<T> findByNamedQuery(String queryName); List<T> findByNamedQuery(String queryName, Object value); List<T> findByNamedQuery(String queryName, Object[] values); List<T> findByProperty(String property, Object value); List<T> findByPagination(final T t, final int firstResult, final int maxResult); int countByPagination(final T t); } 实现类: import java.sql.*; import java.util.List; import org.hibernate.*; import org.hibernate.criterion.*; import org.springframework.orm.hibernate3.*; import org.springframework.orm.hibernate3.support.*; import com.vo.T; public abstract class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO{ protected abstract Class type(); //反射方法调用类 // 保存 public void save(T instance) { getHibernateTemplate().save(instance); } // 更新 public void update(T instance) { getHibernateTemplate().update(instance); } // 删除 public void delete(T instance) { getHibernateTemplate().delete(instance); } // 根据ID查询 @SuppressWarnings("unchecked") public T get(String id) { return (T) getHibernateTemplate().get(type(), id); } // 查询所有 @SuppressWarnings("unchecked") public List<T> findAll() { return getHibernateTemplate().loadAll(type()); } // 根据例子查询 @SuppressWarnings("unchecked") public List<T> findByExample(T instance) { return getHibernateTemplate().findByExample(instance); } // 根据HQL语句进行update操作等 public int bulkUpdate(String hql) { return getHibernateTemplate().bulkUpdate(hql); } // 根据HQL语句进行update操作等 public int bulkUpdate(String hql, Object value) { return getHibernateTemplate().bulkUpdate(hql, value); } // 根据HQL语句进行update操作等 public int bulkUpdate(String hql, Object[] value) { return getHibernateTemplate().bulkUpdate(hql, value); } // 根据HQL语句进行查询 @SuppressWarnings("unchecked") public List<T> find(String queryString) { return getHibernateTemplate().find(queryString); } // 根据HQL语句进行查询 @SuppressWarnings("unchecked") public List<T> find(String queryString, Object obj) { return getHibernateTemplate().find(queryString, obj); } // 根据HQL语句进行查询 @SuppressWarnings("unchecked") public List<T> find(String queryString, Object[] obj) { return getHibernateTemplate().find(queryString, obj); } /** * 使用命名查询进行查询 * * @param queryString * HQL * @param paramName * 参数名 * @param value * 参数值 * @return */ @SuppressWarnings("unchecked") public List<T> findByNamedParam(String queryString, String paramName, Object value) { return this.getHibernateTemplate().findByNamedParam(queryString, paramName, value); } /** * 使用命名查询进行查询 多个参数 * * @param queryString * HQL * @param paramNames * 参数名的数组 * @param values * 参数值的数组 * @return */ @SuppressWarnings("unchecked") public List<T> findByNamedParam(String queryString, String[] paramNames, Object[] values) { return this.getHibernateTemplate().findByNamedParam(queryString, paramNames, values); } /** * 使用HIBERNATE映射文件中的定义的HQL语句进行查询 * * @param queryName * 文件中定义的HQL语句的名字 * @return */ @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName) { return getHibernateTemplate().findByNamedQuery(queryName); } /** * * @param queryName * @param value * @return */ @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName, Object value) { return getHibernateTemplate().findByNamedQuery(queryName, value); } /** * * @param queryName * @param values * @return */ @SuppressWarnings("unchecked") public List<T> findByNamedQuery(String queryName, Object[] values) { return getHibernateTemplate().findByNamedQuery(queryName, values); } /** * 根据属性查询 * * @param property * @param value * @return */ @SuppressWarnings("unchecked") public List<T> findByProperty(String property, Object value) { return this.getHibernateTemplate().findByCriteria( DetachedCriteria.forClass(type()).add(Restrictions.eq(property, value))); } /** * 分页查询 * 注:不能满足要求子类重写该方法 * @param t * @param firstResult * @param maxResult * @return 返回分页查询的数据 */ @SuppressWarnings("unchecked") public List<T> findByPagination(final T t, final int firstResult, final int maxResult) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session.createCriteria(type()); criteria.add(Example.create(t).enableLike(MatchMode.ANYWHERE)); criteria.setFirstResult(firstResult); criteria.setMaxResults(maxResult); return criteria.list(); } }); } /** * 分页统计查询 * * @param t * @return 一共有多少条数据 */ @SuppressWarnings("unchecked") public int countByPagination(final T t) { return (Integer) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session.createCriteria(type()); criteria.setProjection(Projections.rowCount()); criteria.add(Example.create(t).enableLike(MatchMode.ANYWHERE)); return criteria.uniqueResult(); } }); } } 反射类: public class ClassInfoDAO{ @SuppressWarnings("unchecked") protected Class type() { return User.class; } }