基於泛型的通用Dao介面hibernate實現

笨笨鼠→_→發表於2012-07-06

hibernate實現

基於泛型的通用Dao介面:(主要是在使用hibernate或JPA時使用)


  1. package  com.qiujy.dao;   
  2. import java.io.Serializable;   
  3. import java.util.List;   
  4.   
  5. public interface  GenericDao<T> {   
  6.     void create(T entity);   
  7.     void delete(T entity);   
  8.     void update(T entity);   
  9.            
  10.     T findById(Serializable id);   
  11.     List<T> findAll();   
  12.     List<T> findList(int pageNo, int pageSize);   
  13.     int getCountOfAll();   
  14. }  

hibernate實現該口


  1. package com.qiujy.dao.hibernate;   
  2.   
  3. import java.io.Serializable;   
  4. import java.lang.reflect.ParameterizedType;   
  5. import java.util.List;   
  6.   
  7.   
  8. import org.hibernate.criterion.Projections;   
  9. import com.qiujy.common.HibernateUtil;   
  10. import com.qiujy.dao.GenericDao;   
  11.   
  12.   
  13. /**  
  14.  * Hibernate對泛型通用Dao介面的實現  
  15.  */  
  16. public class GenericHibernateDaoImpl<T> implements GenericDao<T> {   
  17.   
  18.   
  19.     private Class<T> clazz;   
  20.   
  21.   
  22.     @SuppressWarnings("unchecked")   
  23.     public GenericHibernateDaoImpl() {   
  24.         //通過反射獲取T的型別資訊例項   
  25.         this.clazz = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass())   
  26.                             .getActualTypeArguments()[0];   
  27.     }   
  28.   
  29.   
  30.     public void create(T entity) {   
  31.         HibernateUtil.getSession().save(entity);   
  32.     }   
  33.   
  34.   
  35.     public void delete(T entity) {   
  36.         HibernateUtil.getSession().delete(entity);   
  37.     }   
  38.       
  39.     @SuppressWarnings("unchecked")   
  40.     public void update(T entity) {   
  41.         //HibernateUtil.getSession().saveOrUpdate(entity);   
  42.         entity = (T) HibernateUtil.getSession().merge(entity);   
  43.     }   
  44.   
  45.   
  46.     @SuppressWarnings("unchecked")   
  47.     public List<T> findAll() {   
  48.         return HibernateUtil.getSession().createCriteria(clazz).list();   
  49.     }   
  50.   
  51.   
  52.     @SuppressWarnings("unchecked")   
  53.     public List<T> findList(int pageNo, int pageSize) {   
  54.         return HibernateUtil.getSession().createCriteria(clazz)   
  55.                                          .setFirstResult((pageNo - 1) * pageSize)   
  56.                                          .setMaxResults(pageSize)   
  57.                                          .list();   
  58.     }   
  59.   
  60.   
  61.     public int getCountOfAll() {   
  62.         Integer count = (Integer) HibernateUtil.getSession()   
  63.                                                .createCriteria(clazz)   
  64.                                                .setProjection(Projections.rowCount())   
  65.                                                .uniqueResult();   
  66.         if (null == count) {   
  67.             return 0;   
  68.         } else {   
  69.             return count.intValue();   
  70.         }   
  71.     }   
  72.   
  73.   
  74.     @SuppressWarnings("unchecked")   
  75.     public T findById(Serializable id) {   
  76.         return (T)HibernateUtil.getSession().load(clazz, id); //get   
  77.     }   
  78.   
  79.   
  80. }  

相關文章