自己四处参考,写写抄抄折腾出来的一个泛型Hibernate DAO,用了Spring的HibernateDaoSupport。提供基本的CRUD操作,支持分页查询,可使用HQL、Criteria和DetachedCriteria。
废话不说了,上代码
废话不说了,上代码
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(transientInstance);
}
/** *//**
* 删除指定ID的对象
*/
public void delete(ID id) ...{
T instance = findById(id);
if (instance != null)
getHibernateTemplate().delete(instance);
}
/** *//**
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(transientInstance);
}
/** *//**
* 删除指定ID的对象
*/
public void delete(ID id) ...{
T instance = findById(id);
if (instance != null)
getHibernateTemplate().delete(instance);
}
/** *//**