一个泛型hibernate DAO,用了spring的HibernateDaoSupport。提供基本的CRUD操作,支持分页查询,可使用HQL、Criteria和DetachedCriteria.
[sql] view plain copy
- package sgf4web.dao;
- import java.io.Serializable;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.hibernate.*;
- import org.hibernate.criterion.*;
- import org.springframework.orm.hibernate3.HibernateCallback;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import sgf4web.dao.support.PaginationSupport;
- import sgf4web.util.GenericsUtils;
- /**
- * 泛型Hibernate DAO类
- *
- * @author DigitalSonic
- */
- @SuppressWarnings("unchecked")
- public class HibernateGenericDao<T, ID extends Serializable> extends HibernateDaoSupport {
- private Class<T> pojoClass;
- /**
- * 初始化DAO,获取POJO类型
- */
- public HibernateGenericDao() {
- // this.pojoClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
- this.pojoClass = GenericsUtils.getSuperClassGenricType(getClass());
- }
- /**
- * 获得该DAO对应的POJO类型
- */
- public Class<T> getPojoClass() {
- return this.pojoClass;
- }
- /**
- * 获得该DAO对应的POJO类型名
- */
- public String getPojoClassName() {
- return getPojoClass().getName();
- }
- //加载对象
- /**
- * 加载所有的对象
- */
- public List<T> loadAll() {
- return (List<T>)getHibernateTemplate().loadAll(getPojoClass());
- }
- /**
- * 根据hql查询
- *
- * @param values 可变参数
- */
- public List find(String hql, Object... values) {
- return getHibernateTemplate().find(hql, values);
- }
- /**
- * 根据条件加载对象
- *
- * @param criteria Criteria实例
- */
- public List<T> findByCriteria(final Criteria criteria) {
- List list = criteria.list();
- return transformResults(list);
- }
- /**
- * 根据条件加载对象
- * @param detachedCriteria DetachedCriteria实例
- */
- public List<T> findByCriteria(final DetachedCriteria detachedCriteria) {
- return (List<T>) getHibernateTemplate().execute(new HibernateCallback() {
- public Object doInHibernate(Session session) throws HibernateException {
- Criteria criteria = detachedCriteria.getExecutableCriteria(session);
- List list = criteria.list();
- return transformResults(list);
- }
- }, true);
- }
- /**
- * 根据给定的实例查找对象
- */
- public List<T> findByExample(T instance) {
- List<T> results = (List<T>)getHibernateTemplate().findByExample(instance);
- return results;
- }
- /**
- * 根据ID查找对象
- */
- public T findById(ID id) {
- return (T) getHibernateTemplate().get(getPojoClassName(), id);
- }
- /**
- * 根据某个具体属性进行查找
- */
- public List<T> findByProperty(String propertyName, Object value) {
- String queryString = "from " + getPojoClassName() + " as model where model."
- + propertyName + "= ?";
- return (List<T>)getHibernateTemplate().find(queryString, value);
- }
- //新建、修改、删除
- /**
- * 新建对象实例化
- */
- public ID save(T transientInstance) {
- return (ID)getHibernateTemplate().save(transientInstance);
- }
- /**
- * 更新已存在的对象
- */
- public void update(T transientInstance) {
- getHibernateTemplate().update