泛型Hibernate DAO实现基本操作

这个博客介绍了如何创建一个泛型Hibernate DAO,它基于Spring的HibernateDaoSupport,提供了包括CRUD操作、分页查询以及HQL、Criteria和DetachedCriteria的支持。代码示例展示了如何进行对象加载、条件查询、分页处理等基本操作。
摘要由CSDN通过智能技术生成

一个泛型hibernate DAO,用了spring的HibernateDaoSupport。提供基本的CRUD操作,支持分页查询,可使用HQL、Criteria和DetachedCriteria.

[sql] view plain copy
  1. package sgf4web.dao;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.*;  
  5. import java.util.regex.Matcher;  
  6. import java.util.regex.Pattern;  
  7.   
  8. import org.hibernate.*;  
  9. import org.hibernate.criterion.*;  
  10. import org.springframework.orm.hibernate3.HibernateCallback;  
  11. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  12.   
  13. import sgf4web.dao.support.PaginationSupport;  
  14. import sgf4web.util.GenericsUtils;  
  15.   
  16. /**  
  17.  * 泛型Hibernate DAO类  
  18.  *   
  19.  * @author DigitalSonic  
  20.  */  
  21. @SuppressWarnings("unchecked")  
  22. public class HibernateGenericDao<T, ID extends Serializable> extends HibernateDaoSupport {  
  23.     private Class<T> pojoClass;  
  24.       
  25.     /**  
  26.      * 初始化DAO,获取POJO类型  
  27.      */  
  28.     public HibernateGenericDao() {  
  29. //        this.pojoClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];  
  30.         this.pojoClass = GenericsUtils.getSuperClassGenricType(getClass());  
  31.     }  
  32.       
  33.     /**  
  34.      * 获得该DAO对应的POJO类型  
  35.      */  
  36.     public Class<T> getPojoClass() {  
  37.         return this.pojoClass;  
  38.     }  
  39.       
  40.     /**  
  41.      * 获得该DAO对应的POJO类型名  
  42.      */  
  43.     public String getPojoClassName() {  
  44.         return getPojoClass().getName();  
  45.     }  
  46.   
  47.     //加载对象  
  48.       
  49.     /**  
  50.      * 加载所有的对象  
  51.      */  
  52.     public List<T> loadAll() {  
  53.         return (List<T>)getHibernateTemplate().loadAll(getPojoClass());  
  54.     }  
  55.       
  56.     /**  
  57.      * 根据hql查询  
  58.      *  
  59.      * @param values 可变参数  
  60.      */  
  61.     public List find(String hql, Object... values) {  
  62.         return getHibernateTemplate().find(hql, values);  
  63.     }  
  64.   
  65.     /**  
  66.      * 根据条件加载对象  
  67.      *   
  68.      * @param criteria Criteria实例  
  69.      */  
  70.     public List<T> findByCriteria(final Criteria criteria) {  
  71.         List list = criteria.list();   
  72.         return transformResults(list);  
  73.     }  
  74.       
  75.     /**  
  76.      * 根据条件加载对象  
  77.      * @param detachedCriteria DetachedCriteria实例  
  78.      */  
  79.     public List<T> findByCriteria(final DetachedCriteria detachedCriteria) {  
  80.         return (List<T>) getHibernateTemplate().execute(new HibernateCallback() {  
  81.                public Object doInHibernate(Session session) throws HibernateException {  
  82.                    Criteria criteria = detachedCriteria.getExecutableCriteria(session);  
  83.                    List list = criteria.list();   
  84.                    return transformResults(list);   
  85.                }  
  86.            }, true);  
  87.     }  
  88.       
  89.     /**  
  90.      * 根据给定的实例查找对象  
  91.      */  
  92.     public List<T> findByExample(T instance) {  
  93.         List<T> results = (List<T>)getHibernateTemplate().findByExample(instance);  
  94.         return results;  
  95.     }      
  96.       
  97.     /**  
  98.      * 根据ID查找对象  
  99.      */  
  100.     public T findById(ID id) {  
  101.         return (T) getHibernateTemplate().get(getPojoClassName(), id);  
  102.     }  
  103.       
  104.     /**  
  105.      * 根据某个具体属性进行查找  
  106.      */  
  107.     public List<T> findByProperty(String propertyName, Object value) {  
  108.        String queryString = "from " + getPojoClassName() + " as model where model."   
  109.                                + propertyName + "= ?";  
  110.        return (List<T>)getHibernateTemplate().find(queryString, value);  
  111.     }  
  112.       
  113.     //新建、修改、删除  
  114.       
  115.     /**  
  116.      * 新建对象实例化  
  117.      */  
  118.     public ID save(T transientInstance) {  
  119.         return (ID)getHibernateTemplate().save(transientInstance);  
  120.     }  
  121.       
  122.     /**  
  123.      * 更新已存在的对象  
  124.      */  
  125.     public void update(T transientInstance) {  
  126.         getHibernateTemplate().update
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值