2007-08-06
一个泛型Hibernate DAO实现
自己四处参考,写写抄抄折腾出来的一个泛型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);
}
/**
废话不说了,上代码

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);
}
/**评论
DigitalSonic
2008-07-02
迁移文章不完整,全文请访问原先博客:http://blog.csdn.net/dingx/archive/2007/08/06/1728287.aspx
发表评论
- 浏览: 2654 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Spring Framework 2.5的文 ...
我能加入你们吗
-- by king911 -
一个泛型Hibernate DAO实 ...
迁移文章不完整,全文请访问原先博客:http://blog.csdn.net/d ...
-- by DigitalSonic -
Spring MVC快速上手教程
迁移的文章不全,全文请访问原先博客地址:http://blog.csdn.net ...
-- by DigitalSonic -
Spring Framework 2.5 Ref ...
不错~辛苦了~
-- by yueye -
Spring Framework 2.5 Ref ...
记得是 DigitalSonic 组织翻译的 3q
-- by wutao8818







评论排行榜