天天看點

我的hibernate通用dao層

1.BaseDao類:底層的dao接口,提供最基本的CRUD和分頁

[java] view plain copy

  1. import java.io.Serializable;  
  2. import java.util.List;  
  3. import com.xxx.utils.PageUtil;  
  4. public interface BaseDao<E> {  
  5.     public void saveEntity(E e);    
  6.     public void updateEntity(E e);    
  7.     public void deleteEntity(E e);  
  8.     public void deleteEntityById(Serializable id);  
  9.     public E loadEntity(final Class<E> class1, final Serializable id);  
  10.     public E loadEntityById(Serializable id);  
  11.     public List<E> loadListEntities(PageUtil page);  
  12. }  

2.BaseDaoImpl類:BaseDao的實作類

[java] view plain copy

  1. import java.io.Serializable;  
  2. import java.lang.reflect.ParameterizedType;  
  3. import java.sql.SQLException;  
  4. import java.util.List;  
  5. import org.hibernate.HibernateException;  
  6. import org.hibernate.Session;  
  7. import org.springframework.orm.hibernate3.HibernateCallback;  
  8. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
  9. import com.xxx.utils.PageUtil;  
  10. public class BaseDaoImpl<E> extends HibernateDaoSupport implements BaseDao<E> {  
  11.     private Class cls;     
  12.     public BaseDaoImpl(){  
  13.         // 就是要擷取E的真實資料類型  
  14.         this.cls =  (Class<E>)((ParameterizedType)this.getClass().getGenericSuperclass())  
  15.         .getActualTypeArguments()[0];  
  16.     }  
  17.     public void saveEntity(E e) {  
  18.         this.getHibernateTemplate().save(e);  
  19.     }  
  20.     public void updateEntity(E e) {  
  21.         this.getHibernateTemplate().update(e);  
  22.     }  
  23.     public void deleteEntity(E e) {  
  24.         this.getHibernateTemplate().delete(e);  
  25.     }  
  26.     public E loadEntity(final Class<E> class1,final Serializable id){  
  27.         return this.getHibernateTemplate().get(class1, id);  
  28.     }  
  29.     @SuppressWarnings("unchecked")  
  30.     public E loadEntityById(Serializable id) {  
  31.         return (E) loadEntity(cls,id);  
  32.     }  
  33.     @SuppressWarnings("unchecked")  
  34.     public List<E> loadListEntities(final PageUtil page) {  
  35.         return this.getHibernateTemplate().executeFind(new HibernateCallback<List<E>>() {  
  36.             public List<E> doInHibernate(Session session) throws HibernateException, SQLException {  
  37.                 Long totalL = (Long) session.createQuery("select count(*) from "+page.getModelName()).uniqueResult();  
  38.                 page.setTotalCount(totalL.intValue());  
  39.                 return session.createQuery("from " +page.getModelName())  
  40.                         .setFirstResult((page.getPageNow()-1)*page.getPageSize())  
  41.                         .setMaxResults(page.getPageSize()).list();  
  42.             }  
  43.         });  
  44.     }  
  45.     public void deleteEntityById(Serializable id) {  
  46.         deleteEntity(loadEntityById(id));  
  47.     }  
  48. }  

3.UserDao:User對應的dao接口 [java] view plain copy

  1. import com.xxx.model.User;  
  2. public interface UserDao extends BaseDao<User>{  
  3.     //這裡還可以自己添加特殊的接口  
  4. }  

4.UserDaoImpl:UserDao的實作類 [java] view plain copy

  1. import org.springframework.stereotype.Component;  
  2. import com.xxx.model.User;  
  3. @Component("userDao")   //Spring的注解給新手的說明哦  
  4. public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{  
  5.     //這裡還可以自己添加特殊的接口的實作  
  6. }  

5.PageUtil,自己寫得分頁輔助類,為hibernate的分頁使用

[java] view plain copy

  1. import org.springframework.stereotype.Component;  
  2. @Component("page")  //spring注解,交給spring管理師最好不過的了,因為是單例嘛,呵呵  
  3. public class PageUtil {  
  4.     private static PageUtil page = null;  
  5.     private String modelName;   //實體名字,比如User,就是寫User  
  6.     private int pageNow;        //目前頁  
  7.     private int pageSize;       //每頁顯示個數  
  8.     private int totalCount;     //總數  
  9.     private PageUtil() {  
  10.     }  
  11.     public int getPages() {     //擷取總頁數  
  12.         return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;  
  13.     }  
  14.     public static PageUtil getInstance() {  
  15.         if (null == page) {  
  16.             page = new PageUtil();  
  17.         }  
  18.         return page;  
  19.     }  
  20.     public static PageUtil getPage() {  
  21.         return page;  
  22.     }  
  23.     public static void setPage(PageUtil page) {  
  24.         PageUtil.page = page;  
  25.     }  
  26.     public String getModelName() {  
  27.         return modelName;  
  28.     }  
  29.     public void setModelName(String modelName) {  
  30.         this.modelName = modelName;  
  31.     }  
  32.     public int getPageNow() {  
  33.         return pageNow;  
  34.     }  
  35.     public void setPageNow(int pageNow) {  
  36.         this.pageNow = pageNow;  
  37.     }  
  38.     public int getPageSize() {  
  39.         return pageSize;  
  40.     }  
  41.     public void setPageSize(int pageSize) {  
  42.         this.pageSize = pageSize;  
  43.     }  
  44.     public int getTotalCount() {  
  45.         return totalCount;  
  46.     }  
  47.     public void setTotalCount(int totalCount) {  
  48.         this.totalCount = totalCount;  
  49.     }  
  50. }  

以上就是個人的通用dao層,隻是給大家抛磚,希望大俠們給點意見

至于ssh的引入jar包和各配置檔案,請關注我另外的文章,謝謝

繼續閱讀